首页 百科知识 字节数组流

字节数组流

时间:2024-02-19 百科知识 版权反馈
【摘要】:字节数组输入流支持标记/复位机制。字节数组输入流生成时,标记的默认位置是流的开始处。除了close()方法会抛出IOException例外,字节数组输入流的其他方法都不会抛出任何受检查例外。因此,字节数组是数据目的地。写出的字节数据被存放在内部的字节数组里。虽然程序员无法直接访问该数组,但利用下面方法则可以方便地访问字节数组输出流的内容。

12.3.3 字节数组流

ByteArrayInputStream类是InputStream类的子类,用于从字节数组或字节数组的一部分中读取数据。因此,字节数组是数据源,作为构造方法的参数。其构造方法有:

①ByteArrayInputStream(byte[]buf);

②ByteArrayInputStream(byte[]buf,int offset,int length)。

字节数组输入流支持标记/复位机制。用mark()方法可以在流的当前位置设置标记,用reset()方法可以将读取位置移回到最近一次设置的标记处。字节数组输入流生成时,标记的默认位置是流的开始处。

除了close()方法会抛出IOException例外,字节数组输入流的其他方法都不会抛出任何受检查例外。

ByteArrayOutputStream类是OutputStream类的子类,用于把数据写到内存中的字节数组中。因此,字节数组(内存缓冲区)是数据目的地。其构造方法有:

①ByteArrayOutputStream();

②ByteArrayOutputStream(int size)。

第1种形式的构造方法创建一个32B的缓冲区;第2种形式的构造方法创建一个指定大小(字节数)的缓冲区。缓冲区的大小会随需要自动加大。

一旦创建了ByteArrayOutputStream实例,就可以调用write方法向其中写出字节数据。写出的字节数据被存放在内部的字节数组里。虽然程序员无法直接访问该数组,但利用下面方法则可以方便地访问字节数组输出流的内容。

①byte[]toByteArray():建立并返回包含迄今为止写到输出流中的所有字节的数组。

②String toString():根据平台默认的字符编码规范将迄今为止写到输出流中的所有字节转换成字符,并返回由这些字符组成的字符串。

③String toString(String enc)throws UnsupportedEncodingException:采用指定的字符编码规范,将字节数组输出流中的数据转换成字符串返回。

④void writeTo(OutputStream out)throws IOException:将字节数组输出流中的数据写入参数out指定的字节输出流中。

除了toString(String enc)方法会抛出UnsupportedEncodingException异常、close()和writeTo(OutputStream out)方法会抛出IOException异常以外,字节数组输出流的其他方法都不会抛出任何受检查的异常。

【例12-8】 编程实现:将程序中的字符串写到内存的字节数组中;再写到文本文件中;然后将内存数组中的数据读到程序中并打印在显示器上。

程序运行结果:

写入流中字节转换为字符串:ByteArrayOutputStream类向内存中的字节数组写数据。

从流中输入的数据是:ByteArrayOutputStream类向内存中的字节数组写数据。

分析与思考:①一个技巧是利用String类的方法将字符串转换成字节数组buf;利用String类的构造方法将字节数组转换成字符串。

②如果使用int i;while((i=bain.read())!=-1){System.out.print((char)i);}语句,结果会怎样?

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈