之前使用的流:FileInputStream,FileOutputStream,FileReader,FileWriter 他们的源头是文件,文件是存储在电脑硬盘上的,Java不能直接访问电脑硬盘的资源,必须借助操作系统,所以用完之后必须要通知操作系统释放资源
||
||
||
现在我们把源头换成电脑上的一块内存(字节数组),网络上的一块内存或远程服务器上的一块内存,Java可以直接访问内存,这一块的资源由垃圾回收机制gc来释放,所以用完之后不用释放资源。
注意点:
1、源头换成字节数组
2、资源不用释放
3、所有的数据都可以转成字节数组
4、内存有限,字节数组不建议太大
字节数组输入流:ByteArrayInputStream
//字节数组输入流
public static void main(String[] args){
//创建源
byte[] src = "talk is cheap show me the code".getBytes();
//选择流
InputStream is = null;
try {
is = new ByteArrayInputStream(src);
byte[] flush = new byte[10];//缓冲容器
int len;
while ((len = is.read(flush)) != -1) {
String str = new String(flush,0,len);
System.out.println(str);
}
} catch (IOException e) {
// TODO: handle exception
}
}
字节数组输出流:ByteArrayOutputStream
不同点:
源头内部维护
流不使用多态
可以不释放资源
//字节数组输出流
public static void main(String[] args){
//创建源(为null,为了格式统一)
byte[] dest = null;
//选择流(因为要用到新增方法,所以不要用多态)
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
//操作:写入
String msg = "show me the code";
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) {
// TODO: handle exception
}
}