- 可以从其中读入一个字节序列的对象称为输入流,而可以向其中写入一个字节序列的对象叫做输出流。抽象类InputStream,OutputStream构成了输入输出层次结构的基础。
- InputStream和OutputStream实现类一般都要覆盖read和write方法,这两个方法在运行时都会阻塞,直至读到数据或者写完数据。为提高效率,可以使用available方法判断当前是否可读,再进行相关操作:
int byteAvailable = in.available();
if(byteAvailable){
byte [] data = new byte[byteAvailable];
in.read(data);
}
- 读写结束后,要使用close来关闭流,关闭输出流的同时会冲刷输出流的缓冲区,若不关闭可能写出字节的最后一个包不能传递出去。此外也可以人为使用flush方法冲刷这些输出。
- FileInputStream和FileOutputStream可以提供附着在一个磁盘文件上的输出流和输入流,构造函数中传入文件名或者文件的完整路径即可:
FileInputStream fin = new FileInputStream("employee.dat");
注意:windows风格路径要写为c:\windows\win.ini这种格式,而不能使用反斜杠,因为反斜杠是转义字符。
- BufferedInputStream和BufferedOutputStream 创建一个带缓冲区的流。
- 使用InputStreamReader类使用选定的unicode字符流转换为其他编码格式的字节流:
InputStreamReader in = new InputStreamReader(new FileinputStream("Kremlin.dat"),"ISO8859_5");
- PrintWriter类实现文本输出:
PrintWriter out = new PrintWriter(new FileWriter("employee.txt"));
out.print("hello world");
这样就将字符串写到文件中了。PrintWriter和FileOutputStream的区别在于PrintWriter支持特定格式的输出字符串,而FileOutputStream则只支持字节级别上的读写。