protected byte[] buf | 用于保存由该流的建立者提供的 byte 数组 也就是构造方法传入 |
protected int count | 个数 |
protected int mark | 流中当前的标记位置 构造时默认将 ByteArrayInputStream 对象标记在位置零处 经过 mark() 方法可将其标记在缓冲区内的另外一个位置处 经过 reset() 方法将当前缓冲区位置设置为此点 protected int mark = 0;定义时设置了默认值,若是不设置将为0 |
protected int pos | 要从输入流缓冲区中读取的下一个字符的索引 |
带参数的read()方法 将数据读取到b的off位置处
//从流中读取数据到b[] 中,从off开始写,写len长度 public synchronized int read(byte b[], int off, int len) { if (b == null) {//若是b为null 空指针 throw new NullPointerException(); } else if (off < 0 || len < 0 || len > b.length - off) {//若是偏移量小于0 或者写入长度小于0 或者想要读取的长度小于实际的长度了 throw new IndexOutOfBoundsException(); } if (pos >= count) {//若是位置光标已经到了最后了,没有数据可读,返回-1 return -1; } int avail = count - pos;//可用个数为总个数count - 当前位置pos if (len > avail) {//若是想要读取的len比实际拥有的数据要长,那么只读取实际的个数 len = avail; } if (len <= 0) { return 0; } System.arraycopy(buf, pos, b, off, len);//使用本地方法拷贝数据 buf 的pos位置开始拷贝,拷贝len个,到b的off位置 pos += len;//位置光标后移 return len; }
|
![]() |
![]() |
ByteArrayInputStream的根本在于针对给定的某个字节数组,提供IO操做方式的统一形式 就好像你写了个方法操做字节数组同样,彻底不涉及资源 因此无需关闭任何实质内容 |
经过close关闭ByteArrayInputStream以后,若是再次使用这个流 并不会抛出异常 固然,流结束了,就不能再继续使用了 |
protected byte buf[]; |
存储数据的缓冲区 |
protected int count; |
缓冲区中的有效字节数,每次写入将会写入到buf[count]处 |
public ByteArrayOutputStream() ;
|
默认长度为32位![]() |
public ByteArrayOutputStream(int size) | 只要参数值合法,建立指定个数的字节数组缓冲区![]() |
write(int) | 将指定的字节写入此 byte 数组输出流 也就是写入到内部的字节数组中 |
write(byte[], int, int) | 将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此 byte 数组输出流 也就是写入到内部的字节数组中 |
由于ByteArrayOutputStream内部维护的是一个字节数组,因此能够直接做为OutputStream中write()方法的参数 代码很简单,就是讲内部的字节数组,转存到入参指定的输出流中 至关于把流中的数据重写了一份到另外的输出流 |
![]() |
计算机全部的数据都是二进制存储,最小的单位是字节,字符的编码形式也正是字节 因此,toString其实就是把字节序列进行解码 |
![]() int类型入参的方法,在JDK1.8 已经弃用 |
toString()使用平台默认的字符集,经过解码字节将缓冲区内容转换为字符串
toString(String charsetName) 使用指定的 charsetName,经过解码字节将缓冲区内容转换为字符串
|
reset是重置的意思,ByteArrayOutputStream 使用buf[] 存储数据,使用count指示位置 因此想要从新使用如今的缓冲区,抛弃原来全部的,只须要将count清零,每次的数据从新从0开始写入字节数组便可 |
![]() |
反正咱们知道如今总共有多少有效字节,原来写入到buf中的可能多于count的那些字节就放着好了,咱们也不去使用 |
转换为字节数组,它自己就是一个字节数组 因此转换比较简单,只须要建立一个大小相同的字节数组,而且将数据拷贝过去便可 |
![]() |