我们知道,文件是存放在硬盘上,java虚拟机不可访问,要通过os来访问,所以在文件输入输出的时候就要操作系统来管理相应的资源。
- 字节数组是java虚拟机可以直接访问,该字节数组可以理解为计算机的内存,远程服务器上的内存,或者是 网络上的内存。 所有的数据都可以转换为字节数组。但是因为内存的大小有限,所以字节数组不宜过大
- 、
步骤
- 1.创建源:源不是文件,而是字节数组(可以理解为计算机的内存,或者是服务器上的内存)
- 2.选择流
- 3.操作
- 4.释放资源:由于java是可以直接访问字节数组的,所以可以不用通知操作系统释放资源,但是一般会保持结构的统一,会加上这个操作。
字节数组输出时的不需要源,由内部来维护,并且流也不用关联源。不用进行关闭。
字节数组输入流
public class ByteArrayStream {
public static void main(String[] args) {
//1.创建字节数组
byte[] src="java bytes test,good luck for you!".getBytes();
//2.选择流,选择文件输入流
ByteArrayInputStream is=null;//方便在finally中使用,设置为全局变量
try {
is=new ByteArrayInputStream(src);
//3.操作,读文件
byte[] flush=new byte[5];//创建读取数据时的缓冲,每次读取的字节个数。
int len=-1;//接受长度;
while((len=is.read(flush))!=-1) {
//表示当还没有到文件的末尾时
//字符数组-->字符串,即是解码。
String str=new String(flush,0,len);//len是读到的实际大小
System.out.println(str);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
// //可以不用释放资源
// if(is!=null) {//表示当文打开时,才需要通知操作系统关闭
// try {
// is.close();
// } catch (IOException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
}
}
字节数组输出流
//字节数组输出流
public class ByteArrayStream {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.创建源
byte[] dest=null;//在字节数组输出的时候是不需要源的。
// 2.选择流
ByteArrayOutputStream os=null;
try {
//3.操作
os=new ByteArrayOutputStream();
//将内容写出
String smg="java welcome!\r\n";//将内容写入字节数组
byte[] datas=smg.getBytes();//将字符创转化成字节数组
//将内容写入
os.write(datas,0,datas.length);//
os.flush();//表示刷新缓冲,避免数据驻留在内存中,一般在输出数据的时候都要将数据刷新。
//可以通过toByteArray或者toString方法获得字节数组的内容。
dest=os.toByteArray();
System.out.println(new String(dest));
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
//4.释放资源
try {
if (null != os) {
os.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
}
}