java.io中的read方法详解(尤其在数组流即在ByteArrayInputStream中)

来源:互联网 发布:冯大辉 知乎 编辑:程序博客网 时间:2024/05/17 23:06

一、我们知道现在具体需要了解的是ByteArrayInputStream中的read方法那我们先来认识一下这个数组流

java.lang.Object
继承者 java.io.InputStream
继承者 java.io.ByteArrayInputStream

public class ByteArrayInputStreamextends InputStreamByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。内部计数器跟踪 read 方法要提供的下一个字节。

关闭 ByteArrayInputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
二、下面细说read方法
这里写图片描述
数据流ByteArrayInputStream中的两个常见read方法,这个图片有些误导,以为read只有无参或者三个参数的情况,其实不然,我们忽略了一个重要的read方法,即数组流ByteArrayInputStream所继承的
java.io
类 InputStream中本身的read方法而其子类只是重写了部分方法,所以我们有时会忽略掉父类的方法
这里写图片描述
父类(InputStream)中的read方法
(1)public int read(byte[] b) throws IOException从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。以整数形式返回实际读取的字节数。
(2)public int read(byte[] b, int off, int len) throws IOException将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。
子类(ByteArrayInputStream)中的read方法
(1)public int read()
从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。如果因为到达流末尾而没有可用的字节,则返回值 -1。
(2)public int read(byte[] b, int off, int len)
 将最多 len 个数据字节从此输入流读入 byte 数组。如果 pos 等于 count,则返回 -1 指示文件结束。否则,读取的字节数 k 等于 len 和 count-pos 中的较小者。如果 k 是正数,则以 System.arraycopy 执行的方式将 buf[pos] 到 buf[pos+k-1] 的字节复制到 b[off] 到 b[off+k-1] 中。将值 k 与 pos 相加并返回 k。
注意:此方法覆盖:类 InputStream 中的 read
下面我们来做个关于byteArrayInputStream的例子(注意其中的read方法使用)
import java.io.*;
public class Example10_10 {
public static void main(String args[]) {
try {
ByteArrayOutputStream outByte=new ByteArrayOutputStream();
byte [] byteContent=”国庆60周年”.getBytes();
outByte.write(byteContent);
ByteArrayInputStream inByte=new ByteArrayInputStream(outByte.toByteArray());
byte backByte []=new byte[outByte.toByteArray().length];
inByte.read(backByte);
System.out.println(new String(backByte));
CharArrayWriter outChar=new CharArrayWriter();
char [] charContent=”中秋快乐”.toCharArray();
outChar.write(charContent);
CharArrayReader inChar=new CharArrayReader(outChar.toCharArray());
char backChar []=new char[outChar.toCharArray().length];
inChar.read(backChar);
System.out.println(new String (backChar));
}catch(IOException exp){}
}

阅读全文
0 0