24-IO流-64-IO流(操作数组的流)

/*
 * 操作字节数组的两个流对象:ByteArrayInputStream与ByteArrayOutputStream
 * 
 * 【特别注意】
 * 这两个流对象操作的源和目的都是内存,是专门用于操作内存的流。
 * 
 * 查找API,ByteArrayOutputStream说明:
 * 		此类实现了一个输出流,其中的数据被写入一个 byte 数组(可变长度)。缓冲区会随着数据的不断写入而自动增长。
 * 可使用 toByteArray() 和 toString() 获取数据。
 * 
 * 【ByteArrayOutputStream关键点】
 * 1.由于该类没有调用底层资源,只是在内存中操作数据(如操作数组等),所以该流不需要关闭,关闭无效;
 * (别的流调用底层资源,需要关闭,节省空间,腾出资源)
 * 2.此类中的方法在关闭此流后仍可被调用。(不管关不关该流,其内方法均能用,因为关闭无效。)
 * 3.不需要抛出IOException。
 * 
 * 【ByteArrayInputStream关键点】
 * 1.包含一个内部缓冲区,该缓冲区包含从流中读取的字节
 * 2.内部计数器跟踪 read 方法要提供的下一个字节
 * 3.关闭该流无效
 * 4.不需要throws IOException
 * 
 * 【注意】
 * 需要源,相当于之前操作文件之前必须给一个文件,该源就用ByteArrayInputStream产生,其内有构造函数:
 * 			public ByteArrayInputStream(byte[] buf)
 * 创建一个 ByteArrayInputStream,使用 buf 作为其缓冲区数组。pos 的初始值是 0,count 的初始值是 buf 的长度。
 */

package demo;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

public class Demo {

	public static void main(String[] args) {

		//明确源是一个字节数组,将abcdef写入到该数组中
		ByteArrayInputStream bis = new ByteArrayInputStream("abcdef".getBytes());
		
		ByteArrayOutputStream bos = new ByteArrayOutputStream();//明确目的
		
//由以上可知,bis和bos内部自带缓冲区(即数组buf),所以不需要手动指定缓冲区
		
		//读写方法和以前一样,【注意】不要关流,没用
		int ch = 0;
		while((ch=bis.read())!=-1){
			bos.write(ch);
		}
		
		System.out.println(bos.toString());//输出abcdef
		
	}

}
/**
 * 【什么时候用这两个类】
 * 需求分析时候,发现源是内存,那么直接用ByteArrayInputStream,发现目的是内存,那么直接用ByteArrayOutputStream,
 * 
 * 如果源和目的其中一个需要操作内存,另一个需要操作文件,那么需要操作内存的那个就可以用这俩类之一,操作目的的该用啥用啥。
 */

/*
 * ByteArrayInputStream和ByteArrayOutputStream具体方法见API,没什么新方法,都大同小异,提一个方法:
 * 
 * 其中ByteArrayOutputStream类中的特有方法:public void writeTo(OutputStream out) throws IOException
 * 将此 byte 数组输出流的全部内容写入到指定的输出流参数中。
 */
/*
 * 还剩余4个流对象,其中操作字符数组:CharArrayReader与CharArrayWriter,其内部自带字符数组作为缓冲区,且这俩是字符流
 * 
 * 操作字符串:StringReader与StringWriter,其内部自带String,这俩是字符流,用于操作字符串。
 */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值