ByteArrayOutputStream的用法

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中,读到末尾为-1
		while ((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;
	}


  • 11
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值