内存流(字节数组流)——ByteArrayInputStream、ByteArrayOutputStream

内存流(字节数组流)——主要用于将数据写入内存或者从内存中读取数据;

我们知道,流操作主要用于读写文件或者是网络传输,而实际开发中经常遇到将数据存入磁盘的缓存操作,那么是否可以将缓存写入内存呢?因为内存的操作速度是远大于磁盘的!答案是有的,那就是内存流!

例:将字节数组写入内存

	public static void main(String[] args) throws IOException {
		ByteArrayOutputStream os = new ByteArrayOutputStream();
		os.write(100);//将指定的字节写入此字节数组输出流。ps:虽然参数是int类型 但是只会写入8位,即一个字节
		os.write(new byte[] {0,0,0,100});//将字节数组写入内存
		os.write(new byte[] {0,0,0,100}, 0, 4);//将字节数组指定位置的数据写入内存
		byte[] byteArray = os.toByteArray();//获取写入内存流中的所有数据
//		os.writeTo(new FileOutputStream(""));//将内存流中的数据全部写入其他输出流
		System.out.println(byteArray.length);//输入结果为9
		
		/*
		 * 关闭此字节数组输出流   
		 * ps:此方法内部是空的没有实际意义,
		 * 调用此方法后再次调用write方法并不会抛出IOException
		 * jdk1.8.191
		 */
		os.close();
	}

例:从内存中读取字节数组

	public static void main(String[] args) throws IOException {
		String str = "123456789";//数据源
		ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes());
		int read = in.read();//从这个输入流中读取下一个字节 返回一个无符号 的byte值,范围 0-255
		System.out.println((char)read);//输出结果为 "1"
		byte[] b = new byte[4];
		in.read(b);
		System.out.println(new String(b));//输出结果为 "2345"
		in.read(b, 0, 4);
		System.out.println(new String(b));//输出结果为 "6789"
		in.reset();//重置指针至mark位置
		in.close();//此方法是一个空方法 ,执行此方法后再次执行read方法并不会导致IOException
		in.markSupported();//测试该流是否可以标记,始终返回true
		in.mark(132);//在当前位置标记  ps:参数132没有意义,始终标记的是当前读取的位置
		/**
		 * in.read(b);方法不会抛出IOException 没有数据时会返回-1;
		 * 其他跟正常io流一样
		 * jdk1.8.191
		 */
	}

ps:

    字节数组流内部采用System.arraycopy();该API实现对字节数组的操作的!不要想得太高大上喔!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dan淡淡的心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值