关于java中文件与流的理解
来源:互联网 发布:好听的淘宝女店铺名称 编辑:程序博客网 时间:2024/06/03 20:23
一、流
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中文件的上传与下载
- Java中文件的上传与下载
- Java中文件的压缩与解压
- Java中文件的切割与合并
- Java 中文件的加密与解密
- 关于java中文件下载中文乱码的事
- 关于java中文件删除失败的原因分析
- Java中文件流的关闭问题
- java中文件的命名与程序运行
- Java中文件的相对路径与绝对路径
- 【JAVA】Web中文件的上传与下载
- Java中文件的操作
- java中文件的输入输出
- Java中文件的操作
- JAVA中文件的操作
- Java中文件的读写
- 2017-8-14
- ZigBee TI ZStack CC2530 2.3 协议栈版本
- C++实现LeetCode(三个数的和最接近目标数)
- JavaSE大复习--看完就知道自己的不足
- C++ Map常见用法说明
- 关于java中文件与流的理解
- 共享内存的创建 实现卖票的程序
- 消息队列
- 容斥原理
- 初学java--重载,重写和继承
- 17.8.14号
- Python3之绑定到类的方法应用
- 数据库—内容的查询语句
- 基于Android真实项目教你一步一步搭建架构 -- 目录