Java IO_字节数组流 尚学堂177

目录

ByteArrayInputStream

ByteArrayOutputStream


 

ByteArrayInputStream

往构造方法里传的参数是字节数组,不是文件:

 getBytes方法能得到字节数组。

FileInputStream和FileOutputStream的源是文件,存在硬盘中,Java虚拟机不能直接去操作,要通过操作系统(OS),所以用完后要通知操作系统去释放资源(close方法)

ByteArrayInputStream的是字节数组,在内存中,不用close,是靠GC回收的。

所以,ByteArrayInputStream类的close方法是个空方法,没有用处,只是为了保证风格统一:

public void close() throws IOException {
}

ByteArrayInputStream类的close方法不用通知操作系统去释放,因为它就在虚拟机的内存中。 

ByteArrayInputStream 没有 FileNotFoundException 这个异常。

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Test {
	public static void main(String[] args) {
		//1、创建源
		byte[] datas = "abcdefg".getBytes();
		//2、选择流
		InputStream is = null;
		try {
			is = new ByteArrayInputStream(datas);
			//3、操作(分段读取)
			byte[] flush = new byte[5];//缓冲容器
			int len = -1;
			while((len = is.read(flush)) != -1) {
				//字节数组-->字符串(解码)
				String str = new String(flush, 0, len);
				System.out.println(str);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			//4、释放资源 关不关无所谓
			try {
				if(null != is) {
					is.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

输出结果:

abcde
fg


 ByteArrayInputStream类的创建源是字节数组,不要太大。释放资源可以不用处理。


ByteArrayOutputStream

其构造方法:

不需要指定目的地。

 其内部根据你的数据,要多大给多大。

该类实现了将数据写入字节数组的输出流。当数据写入缓冲区时,缓冲区会自动增长。可以使用toByteArray()和toString()检索数据。
他有缓冲区,可以通过toByteArray()和toString()拿到数据。

 和ByteArrayInputStream一样,ByteArrayOutputStream的close方法也是一个空方法:

public void close() throws IOException {
}

举例:

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

public class Test {
	public static void main(String[] args) {
		//1、创建源
		byte[] dest = null;//可以不用创建,写了是为了保证风格统一。
		//2、选择流 (要用新增的方法toByteArray,所以不能发生多态)
		ByteArrayOutputStream baos = null;
		try {
			baos = new ByteArrayOutputStream();
			//3、操作(写出)
			String msg = "I love Java.";
			//字符串-->字节数组(编码)
			byte[] datas = msg.getBytes();
			baos.write(datas, 0, datas.length);
			baos.flush();
			//获取数据
			dest = baos.toByteArray();
			System.out.println(dest.length + "-->" + new String(dest, 0, baos.size()));
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//4、释放资源 关不关无所谓
			try {
				if(null != baos) {
					baos.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

输出结果:

12-->I love Java.

这里有12个字节 。


 ByteArrayOutputStream的源是内部来维护的。创建流的时候,不关联源。可以不用释放资源。要获取一下数据,因为它内部将数据保留在内存里了,用toByteArray方法拿一下这个数据。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页