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

版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41054313/article/details/89429886

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

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

例:将字节数组写入内存

	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实现对字节数组的操作的!不要想得太高大上喔!

猜你喜欢

转载自blog.csdn.net/qq_41054313/article/details/89429886