您的位置:首页 > 编程语言 > Java开发

Java IO(二): InputStream

2016-07-19 15:01 831 查看
InputStream 类是 Java IO API 中所有输入流的基类。InputStream 子类包括了 FileInputStream、BufferInputStream、PushbackInputStream 等等。

Java InputStream 例子

InputStream 用于读取基于字节的数据,一次读取一个字节,这是一个 InputStream的例子。

InputStream input = new FileInputStream("文件地址");
int data = input.read();
while(data != -1){
// do something with data
data = input.read();
}


这个例子创建了 FileInputStream 实例。FileInputStream 是 InputStream 的子类,所以可以把 FileInputstream 实例赋值给 InputStream 变量。

注意:为了清晰,代码忽略了一些必要的异常处理。

从 Java7 开始,你可以使用 try-with-resource 结构确保 InputStream 在结束使用之后关闭。这是一个简单地例子。

try(InputStream input = new FileInputStream("file.txt")){
int data = input.read();
while(data != -1){
System.out.print((char) data);
data = input.read();
}
}


当执行线程退出 try 语句块时候,InputStream 变量会被关闭。

read()

read() 方法返回从 InputStream 流内读取一个字节的内容

int data = input.read();


你可以把返回的 int 类型转化为 char 类型

char aChar = (char) datal;


InputStream 的子类可能会包含 read() 的替代方法。比如,DataInputStream 允许你利用 readBoolean(),readDouble() 等方法读取 Java 基本类型 int,long,float,doubule,boolean。

流末尾

如果 read() 方法返回 -1,意味着程序已经读到了流末尾,此时流内没有多余的数据可供读取,-1是一个 int 类型,不是 byte 或者 char 类型,这是不一样的。当读到流末尾,你就可以关闭流了。

read(byte[])

InputStream 包含了2个从 InputStream 中读取数据存储到缓冲数组中的 read() 方法。

int read(byte[])

int read(byte, int offset, int length)

一次性读取一个字节数组,比一次性读取一个字节的方式快的多,所以尽可能使用这两个方法代替 read() 方法。

read(byte[]) 方法尝试读取与定字节数组容量一样大的字节数,返回值说明了已经读取过得字节数,如果 InputStream 内可读的数据不足以填满字节数组,那么数组剩余的部分将包含本次读取之前数组的值。记得检查有多少数据写入到字节数组中。

read(byte, int offset, int length) 方法同样将数据读取到字节数组中,不同的是,该方法从数组的 offset 位置开始,并且最多将 length 个字节写入到数组中。同样的,read(byte, int offset, length) 方法返回一个 int 变量。告诉你已经有多少字节写入已经被写入到字节数组中,所以请记得在读取数据前检查上一次调用 read(byte, int offset, int length)

这两个方法都会在读取到流末尾时返回 -1。

InputStream 示例

InputStream input = new FileInputStream("源文件");
byte [] data = new byte[1024];
int byteRead = input.read(data);
while(byteRead != -1){
// do something with data
byteRead = input.read(data);
}
input.close();


代码中首先创建了一个字节数组,然后声明了一个叫做 byteRead 的存储每次调用 read(byte[]) 返回值都是 int 变量,并且将第一次调用的 read(byte[]) 得到的返回值赋值给它。

在 while 循环中,对读取的数据进行处理,最后再次将数据写入到字节数组中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: