Java中的字节流文件读取教程(一)中的字节流文件读取教程(一)
主要给大家介绍了关于Java中字节流文件读取的相关资料,文中通过示例代码介绍的非常详细,对大家学习或
者使用java具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
前言前言
上篇文章我们介绍了抽象化磁盘文件的 File 类型,它仅仅用于抽象化描述一个磁盘文件或目录,却不具备访问和修改一个文
件内容的能力。
Java 的 IO 流就是用于读写文件内容的一种设计,它能完成将磁盘文件内容输出到内存或者是将内存数据输出到磁盘文件的数
据传输工作。
Java IO 流的设计并不是完美的,设计了大量的类,增加了我们对于 IO 流的理解,但无外乎为两大类,一类是针对二进制文
件的字节流,另一类是针对文本文件的字符流。而本篇我们就先来学习有关字节流的相关类型的原理以及使用场景等细节,主
要涉及的具体流类型如下:
基类字节流基类字节流 Input/OutputStream
InputStream 和 OutputStream 分别作为读字节流和写字节流的基类,所有字节相关的流都必然继承自他们中任意一个,而它
们本身作为一个抽象类,也定义了最基本的读写操作,我们一起来看看:
以 InputStream 为例:
public abstract int read() throws IOException;
这是一个抽象的方法,并没有提供默认实现,要求子类必须实现。而这个方法的作用就是为你返回当前文件的下一个字节。
当然,你也会发现这个方法的返回值是使用的整型类型「int」来接收的,为什么不用「byte」?
首先,read 方法返回的值一定是一个八位的二进制,而一个八位的二进制可以取值的值区间为:「0000 0000,1111
1111」,也就是范围 [-128,127]。
read 方法同时又规定当读取到文件的末尾,即文件没有下一个字节供读取了,将返回值 -1 。所以如果使用 byte 作为返回值
类型,那么当方法返回一个 -1 ,我们该判定这是文件中数据内容,还是流的末尾呢?
而 int 类型占四个字节,高位的三个字节全部为 0,我们只使用它的最低位字节,当遇到流结尾标志时,返回四个字节表示的 -
1(32 个 1),这就自然的和表示数据的值 -1(24 个 0 + 8 个 1)区别开来了。
接下来也是一个 read 方法,但是 InputStream 提供默认实现: