推荐编码格式:
https://www.cnblogs.com/zhaosq/p/9889774.html
字节流
一般用于二进制的字节文件操作
基类InputStream OutputStream
实现类 FileInputStream FileOutputStream
通过 字节数组 或者 能存字节的类型 int 读取
int xxx.read(); 返回单个字节所对应的…
int xxx.read(byte[] b); 返回读到的长度
令人疑惑的是
由于字符范围0~255 byte范围-128~127 对应负数转成正数时 会不会丢失?
(以下格式不规范建议看最顶部链接)
@Test
public void inSingle() {
try(InputStream in = new FileInputStream("D:"+File.separator+"IO"+File.separator+"File"+File.separator+"test1.txt");) {
int b = 0;
while((b=in.read())!=-1) {
System.out.print((char)b);
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void inDuo() {
try(InputStream in = new FileInputStream("D:"+File.separator+"IO"+File.separator+"File"+File.separator+"test1.txt");) {
byte[] b = new byte[10];
int len = 0;
while((len=in.read(b))!=-1) {
System.out.print(new String(b,0,len)); //读取数组中输入流读出的长度
}
} catch (Exception e) {
e.printStackTrace();
}
}
文件复制 一次性都读完了
try(
InputStream in = new FileInputStream("D:\\IO_test\\file\\Stream.txt");
OutputStream out =new FileOutputStream("D:\\\\IO_test\\\\file\\\\copy.txt",true)
) {
int len =0;
byte[] c = new byte[1024]; //由于字符范围0~255 byte范围-128~127 对应负数转成正数会丢失
while((len=in.read(c))!=-1) {
out.write(c, 0, len);
for (int i = 0; i < len; i++) {
System.out.print((char)c[i]);
}
System.out.println(new String(c));//可以将2字节的中文自动合并
}
} catch (Exception e) {
// TODO: handle exception
}
看看中文变成什么样了
字节缓冲输入流
public class BufferedInputStream extends FilterInputStream
构造方法
BufferedInputStream(InputStream in)
创建一个 BufferedInputStream并保存其参数,输入流 in ,供以后使用。
BufferedInputStream(InputStream in, int size)
创建 BufferedInputStream具有指定缓冲区大小,并保存其参数,输入流 in ,供以后使用。
字节缓冲输出流
public class BufferedOutputStream extends FilterOutputStream
该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。