Java IO 之 InputStream 输入字节流

  • Java,inputstream,输入流,io,
  • 2016-04-07 16:15:37

java.io 包中包含了咱们跟 IO 打交道中必要的类和接口。IO 流可以分为输入流和输出流,也可以分为字节流(byte stream)和字符流(character stream)。只是划分的维度不一样而已。

java.io.Closeable

Closeable 是一个接口,继承于 java.lang.AutoCloaseable 接口,close() 方法可能会抛出 IOException 异常。

java.io.InputStream

InputStream 是所有输入字节流的父类。字节流表示它操作的对象是字节,与字节流对应的是字符流,Reader 是输入字符流的父类,咱们可以通过其 API 的设计看出区别。

InputStream API

  • int available()
  • int read(byte[] buffer)
  • int read()
  • int read(byte[] buffer,int byteOffset,int byteCount)
  • long skip(long byteCount)

java.io.FileInputStream

FileInputStream 是一个常见的 InputStream 的直接子类。一般用来读取文件,也就是说把一个文件当成输入,以字节流的方式读取。

常见的用法是:

File file = ...
FileInputStream fis = new FileInputStream(file);

FileInputStream 构造器

FileInputStream 有三个构造器

  • FileInputStream(File file)
  • FileInputStream(FileDescriptor fd)
  • FileInputStream(String path)

FileInputStream API

下面列出 FileInputStream 比 InputStream 增加的 API

  • FileChannel getChannel() Returns a read-only FileChannel that shares its position with this stream
  • final FileDescriptor getFD() Return the underlying file descriptor.

ByteArrayInputStream

字节数组输入流,把一个字节数组当成输入,以字节流的方式读取这个数组。

ByteArrayInputStream 构造器

  • ByteArrayInputStream(byte[] buffer)
  • ByteArrayInputStream(byte[] buf,int offset,int length)

FilterInputStream

FilterInputStream 构造器

  • FilterInputStream(InputStream in)

ObjectInputStream

ObjectInputStream 是把一个 Java 对象当成一个输入。

ObjectInputStream 构造器

  • ObjectInputStream(InputStream input)

ObjectInputStream API

ObjectInputStream 有丰富的 API,这里不具体罗列,因为咱们平时用的也不多。ObjectInputStream 一般与 ObjectOutputStream 配合使用,先通过 ObjectOutputStream 往流里写入数据,包括 Java 对象的成员变量的字段名字以及值。ObjectInputStream 在获取到流后,再以写入的反向顺序读取出来,还原出来 Java 对象。

可能的运用场景是对 Java 对象的保存,比如保存到文件中,再恢复的时候从文件中还原对象。另外一种是两个进程之间的对象传输,把 A 进程的 Java 对象传输到 B 进程。

PipedInputStream

pipe 一般翻译为管道,当两个线程(注意,是线程)需要传送数据的时候,一个创建管道输出流,一个创建管道输入流。

PipedInputStream 构造器

  • PipedInputStream()
  • PipedInputStream(PipedOutputStream out)
  • PipedInputStream(int pipeSize)
  • PipedInputStream(PipedOutputStream out,int pipedSize)

PipedInputStream API

  • viod connect(PipedOutputStream out)

SequenceInputStream

sequence 有按顺序排好的意思,SequenceInputStream 的作用是把两个或者多个 InputStream 按顺序读取。第一个 InputStream 读取结束了,接着读取第二个 InputStream。

SequenceInputStream 构造器

  • SequenceInputStream(InputStream s1, InputStream s2)
  • SequenceInputStream(Enumeration<? extends InputStream> e)

LineNumberInputStream

LineNumberInputStream 的上级父类是 FilterInputStream,不是 InputStream 的直接子类。其作用是对其包裹的 InputStream 进行读行的计数,每当读到 '\r','\n' 和 '\r\n' 的时候,计数会加一。这个类在引入到 Android 的时候就被抛弃,建议使用 LineNumberReader 替代。

BufferedInputStream

FilterInputStream 的子类,其作用是对其包裹的 InputStream 进行缓冲。缓冲带来的缺点就是占用了一定的空间。

DataInputStream

InputStream 是字节流,每次 read 只能读取一个字节,或者一个字节数组,如果我们需要读取一个 int,那么就需要读取 4 个字节,然后再对其进行移位,最后得到一个 int,而 DataInputStream 则把这些操作封装好了。

DataInpuptStream 构造器

  • DataInputStream(InputStream in)

DataInputStream API

  • final byte readByte()
  • final byte readInt()
  • final byte readLong()
  • final byte readDouble()
  • final String readLine() NOTE:Deprecated in API level 1. See BufferedReader
  • final String readUTF()

相关文章

- EOF -

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动。
转载请注明:文章转载自 Binkery 技术博客 [https://binkery.com]
本文标题: Java IO 之 InputStream 输入字节流
本文地址: https://binkery.com/archives/552.html