java byte[]生成

1. ByteArrayOutputStream extends OutputStream

提供了一个byte数组,和记录写入数组值个数的类。

a.实现了write(int)这个抽象函数,这里默认只写int的低位byte,同时多态实现write(byte b[], int off, int len)采用的数组处理方式。

b.内部保存了一个byte[]的数组,默认构造函数初始化数组大小为32,后期如果在write发现大小不够了,将采用*2的机制扩初大小。

c.有一个count记录了当期写入数组的值的个数。

d.在输出方面,我们常常希望提供直接把值输出到其他输出流比如socket stream中,或者直接转化为数组进行下一步处理,甚至采用装饰者模式在外面进行字符处理。

d.1.这里提供了writeTo(OutputStream out),直接把数据写到流里面。

d.2.byte toByteArray()[] 将数据通过Arrays.copyOf获取写入的真正数据数组。

e.reset 清空数据 d1和d2仅仅把数据进行了输出,原始数据任然在,如果需要清空数据,实际这里仅仅对count 清零处理。

f.上述byte[] 和 count因为可能涉及到同时读写,所以对他们的操作都进行了同步处理synchronized

2.ByteBuffer extends Buffer

给nio用的缓冲区,有direct vm外分配和no-direct堆两种

 vs non-direct ByteBuffer : http://blog.csdn.net/chenyi8888/article/details/5343315

allocateDirect(int capacity):构造时我们需要指定大小,并且后期是无法更改大小的。

其数据录入和读取需要遵循Buffer机制,拥有position limit capacity mark等,其拥有写入和读取两个过程,且从写到度需要调用flip进行position的移动,才能正确的读取值。

原文地址:https://www.cnblogs.com/Empenguin/p/3334099.html