ByteArrayOutputStream的用法

来源:互联网 发布:2016中国电梯行业数据 编辑:程序博客网 时间:2024/06/05 16:02
ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。具体用法如下: 

ByteArrayOutputStream:    可以捕获内存缓冲区的数据,转换成字节数组 

ByteArrayInputStream: 可以将字节数组转化为输入流

public static void main(String[] args) {     int a = 0;     int b = 1;     int c = 2;     ByteArrayOutputStream bout = new ByteArrayOutputStream();     bout.write(a);     bout.write(b);     bout.write(c);     byte[] buff = bout.toByteArray();     for (int i = 0; i < buff.length; i++)         System.out.println(buff[i]);     System.out.println("***********************");     ByteArrayInputStream bin = new ByteArrayInputStream(buff);     while ((b = bin.read()) != -1) {         System.out.println(b);     } }
如上所示,ByteArrayOutputStream把内存中的数据读到字节数组中,而ByteArrayInputStream又把字节数组中的字节以流的形式读出,实现了对同一个字节数组的操作. 

综合DataOutputStream&DataInputStream的作用和功能,与ByteArrayOutputStream和ByteArrayInputSream使用将更方便.此时DataOutputStream&DataInputStream封闭了字节流,以适当的形式读出了字节数组中的数据.如下所示:

public static void main(String[] args) throws IOException {     ByteArrayOutputStream bout = new ByteArrayOutputStream();     DataOutputStream dout = new DataOutputStream(bout);     String name = "xxy";     int age = 84;     dout.writeUTF(name);     dout.writeInt(age);     byte[] buff = bout.toByteArray();     ByteArrayInputStream bin = new ByteArrayInputStream(buff);     DataInputStream dis = new DataInputStream(bin);     String newName = dis.readUTF();     int newAge = dis.readInt();     System.out.println(newName + ":" + newAge); }
********************************************************************************

ByteArrayOutputStream及其在IO中的应用

一、基本概念

在创建ByteArrayOutputStream类实例时,内存中会创建一个byte数组类型的缓冲区,缓冲区会随着数据的不断写入而自动增长。

可使用toByteArray()和toString()获取数据。

关闭ByteArrayOutputStream无效,此类中的方法在关闭此流后仍可被调用,而不会产生任何IOException

/** * 读取文件内容 *  * @param filename 文件名 * @return */public String read(String filename) throws Exception{FileInputStream fis = new.FileInputStream(filename); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024];int len = 0;// 将内容读到buffer中,读到末尾为-1while ((len = fis.read(buffer)) != -1){// 本例子将每次读到字节数组(buffer变量)内容写到内存缓冲区中,起到保存每次内容的作用outStream.write(buffer, 0, len);}byte[] data = outStream.toByteArray(); // 取内存中保存的数据fis.close();String result = new String(data, "UTF-8");return result;}


0 0