废话少说,直接上测试代码
package cn.yzy.io;
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.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class pictureToByteArray {
public static void main(String[] args) {
//图片转为字节数组
byte[] datas = fileToByteArray("whale.jpg");
System.out.println(datas.length);
//将字节数组写回图片文件
byteArrayToFile(datas, "b2p.png");
}
//图片转为字节数组
public static byte[] fileToByteArray(String filePath) {
//创建源与目的地
File src = new File(filePath);
//选择流
InputStream is = null;
ByteArrayOutputStream baos = null;
try {
is = new FileInputStream(src);
baos = new ByteArrayOutputStream();
//分段读取
byte[] flush = new byte[1024^10]; //缓冲容器
int len = -1;
while((len = is.read(flush)) != -1) {
baos.write(flush, 0, len); //写入到字节数组
}
baos.flush();
return baos.toByteArray();
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
//释放资源
try {
if(null != is)
is.close();
}catch(IOException e) {
e.printStackTrace();
}
}
return null;
}
//将字节数组写回图片文件
public static void byteArrayToFile(byte[] src, String filePath) {
//源
File dest = new File(filePath);
//流
InputStream is = null;
OutputStream os = null;
try {
is = new ByteArrayInputStream(src);
os = new FileOutputStream(dest);
//操作
byte[] flush = new byte[5]; //缓冲容器
int len = -1;
while((len = is.read(flush)) != -1) {
os.write(flush, 0, len);
}
os.flush();
}catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}finally {
//释放资源
try {
if(null != os)
os.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if(null != is) {
is.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
}
}
可见以上代码正常的将whale.jpg图片转换为字节流,并且计算得大小是938872Bytes,再通过字节流可以正常转换为图片输出b2p.jpg:如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/5c10dc788e3029e020fa6b5e686fd6be.png)
其中发现如果将字节流转换为b2p.png就会出现图片损坏(图片->字节流->图片 前后图片格式要保持不变才能保证图片正常),如下图损坏:
![](https://i-blog.csdnimg.cn/blog_migrate/a234ce7c216a243ede36d2d9f8eb98cb.png)