(1)java的输入和输出所用的到类基本都存在于java.io包中;
(2)输入流表示从一个源读取数据,输出流表示向一个目标写数据;
(3)程序中的输入输出都是以流的形式保存的,流中保存的实际上全都是字节文件;
(4)输入输出主要用于文件传输和网络编程中;
字节流和字符流概述:
- java中提供了专用于输入输出功能的包Java.io,其中包括:
InputStream,OutputStream;Reader,Writer。 - (1)InputStream 和OutputStream,两个是为字节流设计的,主要用来处理字节或二进制对象,
(2)Reader和 Writer两个是为字符流(一个字符占两个字节)设计的,主要用来处理字符或字符串. - 原则上来说java虚拟机底层存在的都是字节数据,可以用字符流读取是因为该方法把字节数据通过一定的编码方式(国际统一使用Unicode,一般是UTF-8)组装成字节的。
- 字节流:是最基本的操作流的方法,它是用于操作任何对象,字节流中提供了几乎所有任何类型IO操作的功能,但是他不可以操作字符串。实际应用中主要用于处理非字符文本的一切IO操作,如视频,音频。。。
- 字符流:由于实际中IO会操作大量的文本文件,如txt文件等等,为了提高读写效率,java提出了字符流的概念,
- 操作方法:
1 使用File类打开一个文件
2 通过字节流或字符流的子类,指定输出的位置,在这一步如果指定文件不存在则新建一个。
3 进行读/写操作
4 关闭输入/输出
字节流与字符流的区别
字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的
字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容
字节流
- 字节输出流(OutputStream)
OutputStream是整个IO包中字节输出流的最大父类,所有的字节输出流都可以向上转型为OutputStream。
- 字节输入流(InputSteam)
InputStream是整个IO包中字节输入流的最大父类,所有的字节输入流都可以向上转型为InputStream。
字符流
- 字符输入流(Reader)
图片来自于网络
- 字符输出流(Writer)
图片来自于网络