理解java的IO流
来源:互联网 发布:马克思 青少年 知乎 编辑:程序博客网 时间:2024/05/27 14:14
1.输入流和输出流
JAVA的输入和输出是相对于内存来说的,是从程序运行所在的内存考虑的。即从内存到硬盘应该视为输出。java的输入流主要有InputStream和Reader作为基类,输出流主要有OutputStream和Writer作为基类
2.字符流和字节流
字节流操作的最小单位是8位字节,主要的基类是InputStream和OutputStream;字符流操作的最小单位是16位字节,主要的基类是Reader和Writer
3.节点流和处理流
节点流和物理底层直接打交道,如果流的构造器参数是一个物理节点,那么它就是节点流。
处理流属于高级流,不与物理底层打交道,它的构造器参数是已存在的流
字符流和字节流的选取:如果进行输入/输出的内容是文本内容,则使用字符流;如果是二进制的内容,则使用字节流。
下面是一个转换流的例子:
package FileTest;import java.io.BufferedReader;import java.io.InputStreamReader;public class FileTest {public static void main(String[] args) {BufferedReader br=null;try{//将System.in转换为Reader对象,以便可以通过字符的形式进行输入InputStreamReader reader=new InputStreamReader(System.in);//包装成BufferedReader,可以使用readLinebr=new BufferedReader(reader);String buffer=null;while((buffer=br.readLine())!=null){if(buffer.equals("exit")){System.exit(1);}System.out.println("输入的内容为:"+buffer);}}catch(Exception e){e.printStackTrace();}finally{try{br.close();}catch(Exception e1){e1.printStackTrace();}}}}
将字节流通过InputStreamReader转换成字符流,可以提高输入效率,然后通过BufferedReader对Reader包装,可以提高读取效率。
4.重定向标准输入/输出
重定向标准输入/输出可以实现对输入/输出平台的改变。比如:可以将日志输出到文件中,而不是普通的控制台上。(这让我有点恍然大悟的感觉,在android真机测试时,就会有很多的这种日志文件,我一直不知道是如何产生的。)下面就是一个生成日志的例子:
package redirectout;import java.io.PrintStream;import java.io.FileOutputStream;public class RedirectOut {public static void main(String[] args) {// TODO Auto-generated method stubPrintStream ps=null;try{ps=new PrintStream(new FileOutputStream("out.txt"));//实现将日志输出到ps所对应的文件中System.setOut(ps);System.out.println("普通字符串");System.out.println(new RedirectOut());}catch(Exception e){e.printStackTrace();}finally{if(ps!=null){ps.close();}}}}
out.txt
普通字符串<a target=_blank href="mailto:redirectout.RedirectOut@1db9742">redirectout.RedirectOut@1db9742</a>
0 0
- 理解Java的IO 流
- 理解Java的IO流
- 理解java的IO流
- Java io 流的理解
- 理解JAVA的IO流
- java io的理解
- Java IO的理解
- Java IO 输入输出流的理解 1
- Java的IO结构理解
- IO流的理解
- 理解java.IO中的“流”
- JAVA IO流深入理解
- JAVA IO流简单理解
- Java 从设计者的角度理解Java IO流
- Java的IO流的操作和一些理解
- JAVA文件IO流的理解(一)
- JAVA文件IO流的理解(二)
- JAVA文件IO流的理解(一)
- redhat5 memcached安装
- 黑马程序员-装饰设计模式
- Android应用程序(app)进程启动过程的源代码分析
- asp.net 页面跳转
- 百度推送
- 理解java的IO流
- ntp 对时
- 【续】收集的几个Eclipse使用的java code formatter。
- 防伪标识究竟如何实现防伪功能?
- PCB关于EMIEMC布线
- (转) Java文件路径(getResource)
- 正则表达式matcher.group用法
- ASP.NET MVC 以64位运行
- HashMap与HashTable(二)-HashMap原理与实现