IO输入输出流学习笔记(第一篇)(JAVA)
2015-04-21 10:49
330 查看
一、流的分类
1.输入流与输出流:按方向来分。我们说的方向是站在程序的角度(内存)。
2.字节流与字符流:按操作的数据单元来分,字节流操作8位的字节,字符流操作16位的字符。字节流主要是InputStream和OutputSream作为基类,字符流是Reader和Writer。
3.节点流与处理流:按功能来分,可以从一个特定IO设备(如磁盘、网络)读/写数据的流称为节点流。而处理流可以理解为将一些节点流封装一起形成的流(高级流)。处理流可以帮助我们在进行输入和输出操作更为简单,执行效率更高,并且可以屏蔽底层设备上节点流的差异。
首先介绍两个流基类:
InputStream/Reader:所有流的基类(abstract),前者是字节输入流,后者是字符输入流。
OutputStream/Writer:同上,前者是字节输出流,后者是字符输出流。
因为以上四个类都是抽象类,不能创建实例,可以用FileInputStream和FileReader来读取文件。参考一下代码示例:
注意fis.close()用来关闭“管道”,因为程序里打开的文件资源不属于内存里的资源,所以JVM的垃圾回收机制不会回收该资源,所以应该显示地条用close来关闭流。但如果采用try catch来写程序的话就不用再显示地调用close()方法,因为其是自动关闭的。(Windows平台的换行符是“\r\n”,Linux/Unix/BSD都是“\n”)。
二、处理流
处理流的好处,一是可以简化代码,二是可以隐藏(屏蔽)底层设备上节点流的差异。使用处理流遵循一条思路,即使用处理流来包装节点流,程序通过处理流来执行输入与输出操作,让节点流来与底层的IO设备、文件交互。
处理流:使用流的构造器参数不是一个物理节点(节点流),而是一个已经存在的流。
节点流:所有节点流的构造器参数都是直接以物理IO节点为参数。
以下代码就是使用PrintSream处理流来包装OutputStream:
Tip:在使用了处理流包装了底层节点流之后,关闭输入/输出流资源时,只要关闭最上层的处理流即可。因为关闭处理流同时,系统会自动关闭被处理流包装的节点流。
暂时写这么多,第一篇都是很基础的知识。
1.输入流与输出流:按方向来分。我们说的方向是站在程序的角度(内存)。
2.字节流与字符流:按操作的数据单元来分,字节流操作8位的字节,字符流操作16位的字符。字节流主要是InputStream和OutputSream作为基类,字符流是Reader和Writer。
3.节点流与处理流:按功能来分,可以从一个特定IO设备(如磁盘、网络)读/写数据的流称为节点流。而处理流可以理解为将一些节点流封装一起形成的流(高级流)。处理流可以帮助我们在进行输入和输出操作更为简单,执行效率更高,并且可以屏蔽底层设备上节点流的差异。
首先介绍两个流基类:
InputStream/Reader:所有流的基类(abstract),前者是字节输入流,后者是字符输入流。
OutputStream/Writer:同上,前者是字节输出流,后者是字符输出流。
因为以上四个类都是抽象类,不能创建实例,可以用FileInputStream和FileReader来读取文件。参考一下代码示例:
</pre><pre name="code" class="java">package Kobe; import java.io.*; public class FileInputTest { public static void main(String[] args) throws IOException { // File fff = new File("E:\javastudy\eclipse\JZ\src\Kobe\TestHas.java"); FileInputStream fis = new FileInputStream("E:/javastudy/eclipse/JZ/src/Kobe/Leaf.java"); byte[] bb = new byte[1024]; int count=0; while((count = fis.read(bb)) >0 ) { System.out.println(new String(bb, 0, count)); // System.out.println(bb); } // while(fis.read() >0) { // System.out.print((char)fis.read()); // } // fis.close(); } }E:\javastudy\eclipse\JZ\src\Kobe\TestHas.java对于new FileInputStream里传入的参数就是典型的节点流,并且注意使用“/”与使用“\\”原理相同,改代码是将文件Leaf.java文件内容读出来并打印到控制台。
注意fis.close()用来关闭“管道”,因为程序里打开的文件资源不属于内存里的资源,所以JVM的垃圾回收机制不会回收该资源,所以应该显示地条用close来关闭流。但如果采用try catch来写程序的话就不用再显示地调用close()方法,因为其是自动关闭的。(Windows平台的换行符是“\r\n”,Linux/Unix/BSD都是“\n”)。
二、处理流
处理流的好处,一是可以简化代码,二是可以隐藏(屏蔽)底层设备上节点流的差异。使用处理流遵循一条思路,即使用处理流来包装节点流,程序通过处理流来执行输入与输出操作,让节点流来与底层的IO设备、文件交互。
处理流:使用流的构造器参数不是一个物理节点(节点流),而是一个已经存在的流。
节点流:所有节点流的构造器参数都是直接以物理IO节点为参数。
以下代码就是使用PrintSream处理流来包装OutputStream:
package Kobe; import java.io.*; public class PrintStreamTest { public static void main(String[] args) { try { FileOutputStream fos = new FileOutputStream("James.txt"); PrintStream ps = new PrintStream(fos); ps.println("I am Paul Walker"); ps.println(new PrintStreamTest()); }catch (IOException ioe) { ioe.printStackTrace(); } } }新建一个James.txt文件,将fos作为参数传到PrintSream对象(包装),fos这里可以理解为是已经存在的流,而James.txt是一个文件就是节点流。我们经常使用的System.out的类型就是PrintSream。
Tip:在使用了处理流包装了底层节点流之后,关闭输入/输出流资源时,只要关闭最上层的处理流即可。因为关闭处理流同时,系统会自动关闭被处理流包装的节点流。
暂时写这么多,第一篇都是很基础的知识。
相关文章推荐
- 黑马程序员学习笔记JAVA高级视频 IO输入输出字符流之Writer类
- IO输入输出流学习笔记(第二篇)(JAVA)
- JAVA学习笔记-基本输入输出示例
- Java学习笔记之IO
- JAVA IO 学习笔记
- Java IO学习笔记
- Java IO学习笔记
- Java IO学习笔记
- Java IO学习笔记
- 黑马程序员---Java IO 学习笔记
- java IO 学习笔记
- Java学习笔记(五):文件IO
- Java学习笔记之IO 1
- java学习笔记--1_常见输入输出语句熟悉篇章
- Java学习笔记之IO 2
- Java学习笔记之IO 3
- Java学习笔记之IO 4
- j2se学习笔记-java.io.File类
- 【Java基础学习笔记】输入输出流之Reader
- 黑马程序员——JAVA学习笔记---IO处理方式