当输入输出的位置设置在内存上,就要使用ByteArrayInputStream和ByteArrayOutputStream来完成输入和输出功能。
需要明白的是,ByteArrayInputStream和ByteArrayOutputStream各自有各自的缓冲区,并不是用的一个缓冲区。并且,它们都可以独立完成读入写出的操作,这点是与其他的IO所不同的。ByteArrayInputStream包含一个内部缓冲区,该缓冲区包含从流中读取的字节。这个类的缓冲区是由流的创建者提供的byte数组。将数据写入缓冲区,使用的是其构造方法;将数据取出,使用的是read方法。
public ByteArrayInputStream(byte[]buf) 创建一个ByteArrayInputStream,使用buf作为其缓冲区数组。该缓冲区数组不是复制得到的。pos的初始值是0,count的初始值是buf的长度。 |
public int read() 从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。如果因为到达流末尾而没有可用的字节,则返回值 -1。 |
ByteArrayOutputStream实现了一个输出流,其中的数据被写入一个byte数组。缓冲区可以自动增长。将数据写入内存时,可以使用write方法;将数据从内存取出,可以使用toString方法和toByteArray方法。
public void write(int b) 将指定的字节写入此 byte 数组输出流。(JDK帮助文档是这么写,和有些的不一样。) |
public String toString() 使用平台默认的字符集,通过解码字节将缓冲区内容转换为字符串。新 String 的长度是字符集的函数,因此可能不等于缓冲区的大小。
|
具体例子大家可以看那个大小写字符转换的程序,在很多网页上都可以找到,这里不再赘述。