文件通常是由一连串的字节或字符构成,组成文件的字节序列称为字节流,组成文件的字
符序列称为字符流。
字节流(可用于处理任何文件,如图片,音频,视频等) :
字节输出流:OutputStream (抽象类)-->FileOutputStream(文件字节输出流)
字节输入流:InputStream(抽象类) -->FileInputStream(文件字节输入流)
字符流(常用于用于处理纯文本):
字符输入流: Reader-->BufferedReader,InputStreamReader(转换流)--将字节输入流转换成字符输入流-->FileReader(文件字符输入流)
字符输出流:Writer-->BufferedWriter,OutputStreamWriter(转换流)--将字节输出流转换成字符输出流-->FileWriter(文件字符输出流)
转换流的例子:BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("c:\\test.txt")));
缓冲流(提高效率,减少对物理读写次数):
有BufferedInputStream ,BufferedOutputStream,BufferedReader,BufferedWriter。
例如可以用BufferedInputStream对InputStream进行装饰, InputStream is = new BufferedInputStream(new FileInputStream("filename.txt")),每次读取文件的时候,先读到缓冲区,再一次性从缓冲区进行读取,减少物理读取的次数,提升程序性能。
打印流(可用于屏幕打印的重定向):
PrintStream(打印字节流) --- System.out 其实对应的就是 PrintStream,默认输出到控制台,我们可以重定向它的输出, 可
以定向到文件,可以执行 System.out.println( “hello ”)不输出到屏幕,而输出到文件例如:OutputStream os = new FileOutputStream("filename.txt");
System.setOut(new PrintStream(os));System.out.println("hello");
而System.in 可以接收屏幕输入.
对象流(对象流可以将 Java 对象转换成二进制写入磁盘,这个过程通常叫做序列化,并且还可以从磁盘读出完整的 Java 对象,而这个过程叫做反序列化):
对象流主要包括:ObjectInputStream 和 ObjectOutputStream