流是数据的流动,是一种处理输入输出的简便方式。就像流水一样,有输入输出。如下图:
数据从一个数据文件读取出来,写入到另一个数据文件。读取数据的对象就是输入流,能向其写入数据的对象就是输出流。
流的特点:流是一维的,流是单向的。是对数据传输的总称或抽象。
四大抽象类:
注:I/O流是很消耗性能,所以使用完后必须调用close()方法关闭流并释放资源。在关闭流时只用关闭最外层的流。
字节和字符流之间的转换用到了转换流TransformIO;转换流在构造时可以指定其编码集合
InputStreamReader需要和InputStream套接;OutputStreamWriter需要和OutputStream套接
import java.io.*; public class TestTransForm2{ public static void main(String[] args){ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); String s = null; try{ s = br.readLine(); while(s!=null){ if(s.equalsIgnoreCase("exit"))break; System.out.println(s.toUpperCase()); s = br.readLine(); } br.close(); }catch(IOException e){ e.printStackTrace(); } } }
字节流在操作时是对文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
字节流是最基本的,主要用在处理二进制数据,它是按字节来处理的,实际上我们操作系统中所有文件在硬盘或在传输时都是以字节方式进行;后来又提出了字符流,它是按虚拟机的encode来处理的,也就是要进行字符集的转化。实际开发中出现的汉字问题实际上都是在字节流和字符流之间的转化不同意造成的。
流是有顺序的,有起点和终点的字节集合。流简单概括为:两个对应一个桥梁。两个对应指字节流和字符流对应,输入和输出对应。一个桥梁指,从字节流到字符流的桥梁。IO流的内容非常庞大,抓住这两个对应和一个桥梁这个核心就明了了。
原文:http://blog.csdn.net/liutengteng130/article/details/19479801