116.ByteArrayOutputStream

这个类实现了一个输出流,其中的数据被写入一个字节数组。当数据被写入时,缓冲区会自动生长。数据可以用toByteArray()1和toString()检索

This class implements an output stream in which the data is written into a byte array. The buffer automatically grows as data is written to it. The data can be retrieved using toByteArray() and toString().
Closing a ByteArrayOutputStream has no effect. The methods in this class can be called after the stream has been closed without generating an IOException.

继承关系
构造方法
ConstructorDescription
ByteArrayOutputStream()创建一个新的字节数组输出流。
ByteArrayOutputStream(int size)创建一个新的字节数组输出流,具有指定大小的缓冲容量,以字节为单位的。
成员方法
Method Modifier and TypeDescription
void close()关闭 ByteArrayOutputStream没有影响。
void reset()将这个字节数组输出流的 count场为零,因此,目前累计输出输出流被丢弃。
int size()返回缓冲区的当前大小。
byte[] toByteArray()创建一个新分配的字节数组。
String toString()使用该平台的默认字符集将缓冲区的内容转换为字符串解码字节。
String toString(int hibyte)过时的,这种方法不正确地将字节转换为字符。作为 JDK 1.1,这样的首选方式是通过toString(String enc)方法,它以一个编码名称的争论,或toString()方法,使用平台的默认字符编码。
String toString(String charsetName)将缓冲区的内容到一个字符串使用命名 charset解码字节。
void write(byte[] b, int off, int len)写 len字节指定字节数组中的起始偏移 off这个字节数组输出流。
void write(int b)将指定的字节写入该字节数组输出流中。
void writeTo(OutputStream out)写这个字节数组输出流的完整内容到指定的输出流的说法,如果通过调用输出流的写法 out.write(buf, 0, count)

需要注意的是,toByteArray是新增的方法,因此在流操作的时候不能继续使用多态

测试示例代码如下:

 package cn.yzy.io;

import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class testByteArrayOutputStream {

	public static void main(String[] args) {
		//临时访问字节流空间
		byte[] dest = null;
		//创建流
		ByteArrayOutputStream baos = null;
		
		try {
			baos = new ByteArrayOutputStream();
			String msg = "go big or go home";  //from facebook
			byte[] data = msg.getBytes();
			baos.write(data, 0, data.length);
			baos.flush();
			
			//获取写入内存的数据到dest中
			dest = baos.toByteArray();
			/*
			 * 可以通过ByteArrayOutputStream的toString方法还原字符串
			 * 也可以通过ByteArrayOutputStream调用toByteArray之后得到的字节数组利用String构造字符串
			 */
			System.out.println("baos.toString():" + baos.toString());
			System.out.println("ByteArrayOutputStream调用toByteArray-->String-->constructorL:" + new String(dest, 0, dest.length));
			System.out.println("ByteArrayOutputStream调用toByteArray-->String-->constructorL:" + new String(dest, 0, baos.size()));
			//ByteArrayOutputStream的size方法获取的是缓冲区中字节数组的大小,ByteArrayOutputStream调用toByteArray获得的字节数组大小没有变化
			
			
			System.out.println("dest.length:" + dest.length);
			System.out.println("dest.toString().length():" + dest.toString().length());
		}catch (IOException e) {
			e.getStackTrace();
		}finally {
			try {
				if(null != baos)
					baos.close();
			}catch (IOException e) {
				e.getStackTrace();
			}
		}
	}

}

  1. 新增的方法 ↩︎

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值