Java中的流与文件:流
来源:互联网 发布:无锡激光编程招聘信息 编辑:程序博客网 时间:2024/06/03 09:13
一、流
Java API中,可以从其中读入一个字节序列的对象称为输入流,而可以向其中写入一个字节序列的对象称为输出流。这些字节序列的来源地和目的地可以是文件,而且通常都是文件,但是也可以是网络连接,甚至是内存块。抽象类InputStream和OutputStream构成了输入/输出类层次结构的基础。
因为面向字节的流不便于处理以Unicode形式存储的信息,所以从抽象类Reader和Writer中继承出来了一个专门用于处理Unicode字符的单独的类层次结构。这些类拥有的读入和写出操作都是基于两字节的Unicode码元的,而不是基于单字节的字符。
( 1 )读写字节
InputStream类有一个抽象方法: abstract int read();
与此类似,OutputStream类定义了下面的抽象方法:abstract void write(int b);
read和write方法在执行时都将阻塞,直至字节确实被读入或写出。这就意味着如果流不能被立即访问,那么当前的线程将被阻塞。这使得在这两个方法等待指定的流变为可用的这段时间里,其他的线程就有机会去执行有用的工作。
当你完成对流的读写时,应该通过调用close方法来关闭它,这个调用会释放掉十分有限的操作系统资源。如果一个应用程序打开了过多的流而没有关闭,那么系统资源将会被耗尽。关闭一个输出流的同时还会冲刷用于该输出流的缓冲区:所有被临时置于缓冲区中,以便用更大的包的形式传递的字符在关闭输出流时都将被送出。特别是,如果不关闭文件,那么写出字节的最后一个包可能将永远得不到传递。当然,我们还可以用flush方法来人为地冲刷这些输出。
Java提供了众多从基本的InputStream和OutputStream类导出的类,这些类使我们可以处理那些常用格式表示的数据,而不只是字节。
常用方法:
java.io.InputStream 1.0abstract int read() 从数据中读入一个字节,并返回该字节。这个read方法在碰到流的结束时返回-1.
void close() 关闭输入流
java.io.OutputStream 1.0
abstract void write(int n) 写出一个字节的数据
void close() 冲刷并关闭输出流
void flush() 冲刷输出流,也就是将所有缓存的数据发送到目的地
(2)完整的流家族
按照使用方法来划分:处理字节和字符两个单独的层次结构。正如所见,InputStream和OutputStream类可以读写单个字节或字节数组。如果想要读写字符串和数字,就需要功能更强大的子类,例如DataInputStream和DataOutputStream可以以二进制读写所有的基本Java类型。
另一方面,对于Unicode文本,可以使用抽象类Reader和Writer的子类。
总结:对于字节的读取操作使用InputStream和OutputStream类,Unicode字符的读取操作使用Reader和Writer类。虽然InputStream和OutputStream可以读取字符串但是对于Unicode的字符无法区分出来正常显示。
(3)组合流过滤器
FileInputStream和FileOutputStream可以提供附着在一个磁盘文件上的输入流和输出流,而你只需向其构造器提供文件名或文件的完整路径名。
Java使用一种灵巧的机制来分离两种职责。某些流可以从文件和其他更外部的位置上获取字节,而其他的流可以将字节组装到更有用的数据型中。Java程序员必须对二者进行组合。
通过嵌套过滤器来添加多重功能。例如,流在默认情况下是不被缓冲区缓存的,也就是说,每个对read的调用都会请求操作系统在分发一个字节。相比之下,请求一个数据块并将其置于缓冲区中会显得更加高效。如果我们想使用缓冲机制,以及用于文件的数据输入方法,那么就需要使用如下代码: DataInputStream din = new DataInputStream(new BuffereInputStream(new FileInputStream("employee.dat")));
注意:DataInputStream置于构造器链的最后,这是因为我们希望使用DataInputStream的方法,并且希望它们能够使用带缓存机制的read方法。
- Java中的流与文件:流
- Java中的流与文件:正则表达式
- Java中的流与文件:ZIP文档
- Java中的流与文件:文本的输入与输出
- java 文件与流
- Java流与文件
- java 流与文件
- Java流与文件
- Java流与文件
- java文件路径中的/与\\
- java中的File与“流”
- Java流与文件操作
- Java流与文件操作
- java流与文件操作
- Java流与文件操作
- Java流与文件操作
- java流与文件操作
- Java流与文件操作
- Vim 实用技术,第 3 部分: 定制 Vim
- android ndk安装
- linux中fork()函数详解(原创!!实例讲解)
- JS中的Json和String的转换
- LeetCode95—Unique Binary Search Trees II
- Java中的流与文件:流
- Camera360网页版
- 七、WebGL入门,正交投影,坐标变换初探
- Android Studio添加aar包依赖
- Centos安装(更新)git(亲测有效)
- Eclipse中定位至某一行的快捷键
- Java ClassLoader
- 【转载】人生如梦游戏间,RPG游戏开源开发讲座(JAVA篇)[1]——风云初现
- 使用脚本编写 Vim 编辑器,第 1 部分: 变量、值和表达式