Java IO流 ---字节数组节点流

字节数组 字节节点流
    输入流:ByteArrayInputStream read(byte[], int off, int len) 可以不用close()方法,
    一般使用字节数组流操作其他计算机、服务器中的数据,不使用后内存会自动释放,不需要手动释放,在这里加close()会加入
    一个空的方法,不执行操作,也不会报错
    输出流:ByteArrayOutputStream write(byte[], int off, int len) + toByteArray() 
        与文件数据操作的区别:输出的对象为字节数组,因此有一个新方法toByteArray(),不可以使用多态方法

字节数组流的操作


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

/**
 * 字节数组流
 * 字符数组大小有限,操作的文件不能过大
 * @author Administrator
 *
 */
public class ByteArrayStream {
	public static void main(String[] args) throws IOException {
		read(write());
	}
	/**
	 * 字节数组输入节点流
	 * 操作与文件字节流输入一致
	 * @throws IOException 
	 */
	public static void read(byte[] bStr) throws IOException{
		//数据源
	//	String msg = new String("操作与文件字节流输入一致");
	//	byte[] bStr = msg.getBytes();//转换为字节数组
		//选择流
		InputStream is = new BufferedInputStream(
				new ByteArrayInputStream(
						bStr
						)
				);
		//操作
		byte[] flush = new byte[1024];
		int len = 0;
		while(-1!=(len=is.read(flush))){
			String str = new String(flush, 0, len);
			System.out.println(str);
		}
		
	}
	/**
	 * 输出流
	 * 操作与文件输出流有些区别
	 * 输出的对象为字节数组,因此有一个新方法toByteArray()
	 * 不可以使用多态方法
	 */
	public static byte[] write(){
		//目的地
		byte[] dest;
		//选择流
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		//操作
		String msg = "操作与文件字节流输入一致";
		byte[] info = msg.getBytes();
		bos.write(info, 0, info.length);
		//获取数据
		dest = bos.toByteArray();
		return dest;
	}
}

字节数组流与文件输入输出流的结合

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 字节数组流与文件操作的字节流结合
 * 	文件--(字节输入流)-->程序--(字节数组输出流)-->字节数组;
 * 	字节数组--(字节数组输入流)-->程序--(字节输出流)-->文件;
 * @author Administrator
 *
 */
public class ByteArray_File_Stream {
	public static void main(String[] args) throws IOException {
		byte[] data = getByteFromFile("D:/CER/img/Out.txt");
		toFileFromByteArray(data, "D:/CER/img/Out1.txt");
		System.out.println(new String(data));
	}
	/**
	 * 文件--(字节输入流)-->程序--(字节数组输出流)-->字节数组
	 * @return
	 * @throws IOException 
	 */
	public static byte[] getByteFromFile(String srcPath) throws IOException{
		//文件源
		File src = new File(srcPath);
		//字节数组目的地
		byte[] dest = null;
		//选择流
		InputStream is = new BufferedInputStream(new FileInputStream(src));//字节输入流
		ByteArrayOutputStream bos = new ByteArrayOutputStream();//字节数组输出流
		//操作 
		byte[] flush = new byte[1024];//不断读取
		int len = 0;
		while(-1!=(len=is.read(flush))){
			//写入到字节数组输出流
			bos.write(flush, 0, len);
		}
		bos.flush();
		//获取数据
		dest = bos.toByteArray();
		bos.close();
		is.close();
		return dest;
	}
	/**
	 * 字节数组--(字节数组输入流)-->程序--(字节输出流)-->文件
	 * @param src 字节数组源
	 * @param dest 文件地址
	 * @throws IOException 
	 */
	public static void toFileFromByteArray(byte[] src,String destPath) throws IOException{
		//源 src 目的地 dest
		File dest = new File(destPath);
		//选择流
		InputStream is =new BufferedInputStream(new ByteArrayInputStream(src));//字节数组输入流
		OutputStream os =new BufferedOutputStream(new FileOutputStream(dest));//字节输出流
		//操作
		int len = 0;
		byte[] flush = new byte[1024];
		while(-1!=(len=is.read(flush))){
			//写出到文件中
			os.write(flush, 0, len);
		}
		os.flush();
		os.close();
		is.close();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值