IO_05_综合_对接流

本文介绍了一种在Java中将图片转换为字节数组,再将字节数组还原为图片的方法。首先使用FileInputStream从本地读取图片,接着通过ByteArrayOutputStream将图片数据转换为字节数组。反过来,利用ByteArrayInputStream将字节数组读入内存,最后通过FileOutputStream将数据写入新的图片文件。
摘要由CSDN通过智能技术生成

IO_综合_对接流
在这里插入图片描述
byteArrayInputStream 意思是程序到字节数组
byteArrayOutputSteam意思是字节数组到程序
将图片转换成字节数组,然后在将字节数组还原成图片
1.图片读取到字节数组
1).图片到程序用FileInputStream
2).程序到字节数组ByteArrayOutputStream

byte[] flush = new byte[1024*10];//缓冲容器
int len = -1; //接收长度
while ((len=is.read(flush))!=-1) {//结尾的结果等于-1
	 baos.write(flush,0,len);		//写出到字节数组中	
	 }			
baos.flush();
return baos.toByteArray();

2.将字节数组还原成图片
1).字节数组到程序ByArrayInputStream
2).程序到文件FileOutputStream

int len = -1; //接收长度
while ((len=is.read(flush))!=-1) {
os.write(flush,0,len);//写出到文件				
					}

完整代码

 import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.Reader;

/*
 *1.图片读取到字节数组
 * 1)图片到程序 FileInputStream
 * 2)程序到字节数组 ByteArrayOutputStream
 *2.字节数组写到文件
 * 1).字节数组到程序ByArrayInputStream
 * 2).程序到文件FileOutputStream
 */
public class IOtest07 {
	public static void main(String[] args) throws IOException {
		byte[] datas = fileToByteArray("D:/WorkSpace/IO/src/io.jpg");
		System.out.println(datas.length);
		byteArrayToFile(datas, "D:/WorkSpace/IO/src/p-byte.png");
	}
	//1.图片读取到字节数组
	public static byte[] fileToByteArray(String filePath){
		//1.创建源与目的地
				File src = new File(filePath); //图片
				byte[] dest = null;   //字节数组
				
				//2.选择流
				InputStream is =null; 
				ByteArrayOutputStream baos = null;
				try {
					is = new FileInputStream(src);
					baos = new ByteArrayOutputStream();
					//3.操作(分段读取)
					byte[] flush = new byte[1024*10];//缓冲容器
					int len = -1; //接收长度
					while ((len=is.read(flush))!=-1) {//结尾的结果等于-1
					  baos.write(flush,0,len);		//写出到字节数组中
					}					
					baos.flush();
					return baos.toByteArray();
				
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}finally{
					//4.释放资源 
					try {
						if (null!=is) { //如果 is没有就不存在释放
							is.close();
						}
						
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
				}
				return null;
				
	}
	//2.字节数组写到图片

	 // 1).字节数组到程序ByArrayInputStream
	  //2).程序到文件FileOutputStream
	
	public static void byteArrayToFile(byte[] src, String filePath) throws IOException{
		//1.创建源
				File dest = new File(filePath);
				OutputStream os = null;
				InputStream is = null;
				//2.选择流
				try {
					is = new ByteArrayInputStream(src);
					os = new FileOutputStream(dest);
					//3.操作(分段读取)
					byte[] flush = new byte[1024];//缓冲容器
					int len = -1; //接收长度
					while ((len=is.read(flush))!=-1) {
						os.write(flush,0,len);//写出到文件
						
					}
					
					os.flush();
			
				}finally{
					//4.释放资源 
					try {
						if (null!=os) { //如果 is没有就不存在释放
							os.close();
						}
						
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
				
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值