IO
IO:输入输出流.是用来读写数据的,IO流相当于一个管道,只不过这个管道的两头分别是数据源和程序。
我们查看API后 知道了 输入输出流在IO这个包里,所以我们统称IO。
输入输出流的分类:
按数据流方向:输入流 和输出流
按处理书籍的单位: 字节流和字符流
按功能: 节点流和处理流
什么是节点流和处理流?
答:节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。
处理流:使用节点流作为输入或输出。是使用一个已经存在的输入流或输出流连接创建的。
四种抽象流类型:
| 字节流 | 字符流 |
输入流 | Inputstream | Reader |
输出流 | Outputstream | Writer |
在IO这个包里的类 凡是以InputStream 结尾的都继承于它
凡是以OutputStream 结尾的都继承于它
同理 Reader,Writer的子类也继承于他
字节流与字符流有什么区别?
字节流与字符流主要的区别是他们的的处理方式
字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的
但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化
这两个之间通过 InputStreamReader,OutputStreamWriter来关联,实际上是通过byte[]和String来关联
在实际开发中出现的汉字问题实际上都是在字符流和字节流之间转化不统一而造成的
在从字节流转化为字符流时,实际上就是byte[]转化为String时,
public String(byte bytes[], String charsetName)
有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang
而在字符流转化为字节流时,实际上是String转化为byte[]时,
byte[] String.getBytes(String charsetName)
也是一样的道理
至于java.io中还出现了许多其他的流,按主要是为了提高性能和使用方便,
如BufferedInputStream,PipedInputStream等
本节只对IO大概的介绍下,具体的一些类如何用 将会在下节介绍