我们知道,文件是存放在硬盘上,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
			}
		}
	}

}