概述
Java的io流,可大致分为两类,字节流和字符流
如下图:
字节流(Byte Streams)
所谓字节流,即在java程序采用8位的字节单位实现输入和输出,如上图所示,所有的字节流都继承自 InputStream(输入流)和OutputStream(输出流).
首先看一下官方的小例子:
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
FileInputStream 为源(文件)提供了read()方法,取出一定单位(字节)的内容,并将其赋值给一个int变量后,FileOutputStream 再将得到的变量c输出至新文件中,这就是整个输入输出的整个过程,如下图:
切记 在程序完成操作后,一定要记得关闭输入,输入流,否则可能产生资源泄露(resource leak)
字符流(Character Streams)
Java 存储使用unicode 编码存储字符,字符流根据系统本地环境使用具体的编码,当然也可以手动指定编码,中文系统一般使用utf-8或者gbk
如:
例:
FileReader inputStream = null;
FileWriter outputStream = null;
try {
inputStream = new FileReader("xanadu.txt");
outputStream = new FileWriter("characteroutput.txt");
int c;
while ((c = inputStream.read()) != -1) {
outputStream.write(c);
}
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
和字节流的操作基本相同,值得注意的是当inputstream执行read()赋值给int变量c的时候,是将获取的字符传递给c的后16位,而字节流获取的字节传递至int变量的后8位。这是由java基本变量类型的长度决定的