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();
}
}
}
}