BigDecimal
主要用来解决浮点数运算不精确的问题
BigDecimal a2 = new BigDecimal(a + "");
使用 a + "" 的方式将 a 这个 double 类型的数据转换为 String 类型字符串,如果在计算时不转换为字符串的话,会导致计算仍然不精确
bd3 = a2.divide(b2,3,BigDecimal.ROUND_HALF_UP);
括号中的 b2 指的是除法运算的分子,3 代表保留的小数位数, BigDecimal.ROUND_HALF_UP 表示舍入方法为四舍五入
BigInteger
主要用来解决超过普通数据类型的整数接收和运算
BigInteger a = new BigInteger("100000000000000000000");
运算方式
a.add(b) 加
a.divide(b) 除
a.multiply(b) 乘
a.subtract(b) 减
自动装箱/自动拆箱
使用以下代码默认相等于 Integer i = new Integer(123423)
Integer i = 123423;
使用以下代码实现数据拆箱
int i1 = i;
IO流
字节读取流:InputStream抽象类 --- FileInputStream子类
创建对象的方式:
FileInputStream in =
new FileInputStream(
"E:\\cgbvn2109\\demo.txt");
写入方式:
syso( in.read());//会自动向下读取
当读取不到时会读出 -1
批量读取方式:
int data;
while( ( data=in.read() ) != -1 ) {
System.out.println( ( char ) data ); //将字节转为char类型显示
}
//如果使用了流,一定要关闭流
in.close();//释放文件
BufferedOutputStream -- 高效字节流写入方式
BefferedOutputStream底层维护了一个byte数组,默认容量是8k
高效字节输出流结构
BufferedOutputStream 对象名称 = new BufferedOutputStream(FileOutputStream对象);
FileOutputStream 对象 = new FileInputStream(File对象)
File 对象名 = new File(文件路径);
package cn.tedu.bigdecimal;
import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Test3_BufferOutputSteam {
public static void main(String[] args) throws Exception {
method();
}
private static void method() {
OutputStream out = null;//声明父类对象并进行初始化
try {
out = new BufferedOutputStream(
new FileOutputStream("E:/2109/123.txt"));//指定创建文件的路径
out.write(48);//写入字节
out.write(49);
out.write(50);
} catch (IOException e) {//捕捉IO报警
// TODO Auto-generated catch block
e.printStackTrace();
}finally {//如果异常没有被捕获则执行finally里的代码
try {
out.close();//释放
} catch (IOException e) {//捕捉报警
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
文件的复制
package cn.tedu.writer2;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Scanner;
import javax.swing.plaf.basic.BasicRadioButtonMenuItemUI;
public class Test1_Writer4 {
public static void main(String[] args) {
System.out.println("请输入需要复制的文件路径:");
String source = new Scanner(System.in).next();
System.out.println("请输入接受文件的路径及名称");
String target = new Scanner(System.in).next();
long i = System.currentTimeMillis();
try {
copy(source,target);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long j = System.currentTimeMillis();
System.out.println("复制文件所用时间为:" + ( j - i ) + "毫秒");
}
private static void copy(String source, String target) throws Exception {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(target));
BufferedInputStream in = new BufferedInputStream(new FileInputStream(source));
//字节输出流结构
//BufferedOutputStream 对象名称 = new BufferedOutputStream(FileOutputStream对象);
//FileOutputStream 对象 = new FileInputStream(File对象)
//File 对象名 = new File(文件路径);
int a;
while ((a = in.read()) != -1) {
out.write(a);
}
System.out.println("复制成功!!!");
in.close();
out.close();
}
}
批量读写
按照数组去读取
private static void copy(String source, String target) throws Exception {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(target));
BufferedInputStream in = new BufferedInputStream(new FileInputStream(source));
//批量读写时候需要使用数组接收
byte[] bs = new byte[8192];
int a;
while ((a = in.read(bs)) != -1) {
out.write(bs);
}
System.out.println("复制成功!!!");
in.close();
out.close();
}