OutputStream(字节输出流)、OutputStreamReader(字符输出流)、BufferedWriter(缓冲方式)、InputStream(字节输入流)、InputStreamReader(字符输入流)、BufferedReader(读取缓冲方式)
概述:
众所周知在计算机中通讯和存储数据都是以二进制为单位的,0或者1,其中0或者1所占的位置叫做位 1字节(byte)=8位(bit)=8个二进制位 ,通常所说的汉字占2个字节,可以理解为 1汉字=2字节=16位
1B = 1024bit
1Kb = 1024*1024bit
1Mb = 1024*1024*1024bit
明白上述概念再说下面的内容;
OutputStream是输出流的父类
InputStream 是输入流的父类
InputStream InputStreamReader 区别
InputStream OutputStream 是字节流所以在输出的时候需要考虑 String转为byte 然后byte转为String
InputStreamReader OutputStreamReader 是字符流 输出的时候不需要考虑互相转换 直接就可以输出String
字节流直接操作文件本身,字符流则是针对内存开辟一个缓冲区
什么是缓冲区?为什么要做缓冲区?
缓冲区通俗来说就是一个暂时存储数据的容器,比如你频繁操作一个文件或者查询数据库数据,肯定影响性能,但是如果你开辟一个缓冲区,将之前查到的数据存在内存中,下次直接在内存读取,速度会快很多。缓冲区就跟这个概念差不多,将读取到的数据先全部放在缓冲区内,等到flush()或者close() 在统一输出到文件中去。
代码演示
InputStream实现一个字节一个字节的读取,而InputStreamReader是升级版实现一个字符一个字符的读取,BufferedReader再次升级实现一行一行的读取;
同理 OutputStream相反,并且OutputStream是直接操作文件,运行完文件直接就出现内容,但是OutputStreamReader则是作用与内存
/**
* 创建字节输出流并且写完后不关闭流
*/
public class demo {
public static void main(String[] args) throws Exception{
//字节流写数据 并且不关闭输出流
OutputStream outputStream = new FileOutputStream(new File("D:\\tjbh项目\\2222.txt"));
byte[] b = "1234567".getBytes("UTF-8");
outputStream.write(b);
}
}
可以看到没有关闭流运行完直接就可以看到内容
如果使用字符流
/**
* 创建字符输出流并且写完后不关闭流
*/
public class demo {
public static void main(String[] args) throws Exception{
//字符流写数据 并且不关闭字符流
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File("D:\\tjbh项目\\1111.txt")));
writer.write("12345");
}
}
可以看到并没有在文件中显示内容,说明现在数据还都在缓冲区内,这时候只要close()或者 flush() 就可以将数据存到文件中
/**
* 关闭流
*/
public class demo {
public static void main(String[] args) throws Exception{
//字符流写数据 并且不关闭字符流
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File("D:\\tjbh项目\\1111.txt")));
writer.write("12345");
writer.close();
}
}
BufferedReader 与 BufferedWriter 区别
只有这几个方法,无法实现一行一行的读取,那么就用到了BufferedReader
/**
* 一行一行的读取
*/
public class demo {
public static void main(String[] args) throws Exception{
InputStream inputStream = new FileInputStream(new File("D:\\tjbh项目\\1111.txt"));
InputStreamReader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader);
String data = "";
while ((data = bufferedReader.readLine())!=null){
System.out.println(data);
}
}
}