为了账号安全,请及时绑定邮箱和手机立即绑定

字节流转成字符串之后,在通过字符串转成字节流后的文件为什么会不一样?

字节流转成字符串之后,在通过字符串转成字节流后的文件为什么会不一样?

犯罪嫌疑人X 2019-03-01 11:13:42
public static void main(String[] args) throws Exception { File sourceFile = new File("/home/joy/图片/img1-lg.jpg"); File tempFile = new File("/home/joy/桌面/TempFile"); saveTempFile(sourceFile, tempFile); String str = byteToString(tempFile); File saveFile = new File("/home/joy/桌面/saveFile.jpg"); StringTobyte(str,saveFile); } // 保存临时文件 public static void saveTempFile(File sourceFile, File tempFile) throws Exception { FileInputStream inputStream = new FileInputStream(sourceFile); FileOutputStream fileOutputStream = new FileOutputStream(tempFile); byte[] buf = new byte[10 * 1024]; int readLeng = 0; while ((readLeng = inputStream.read(buf)) != -1) { fileOutputStream.write(buf, 0, readLeng); fileOutputStream.flush(); } fileOutputStream.close(); inputStream.close(); } // 文件字节转字符串 public static String byteToString(File file) throws Exception { StringBuilder returnDatas = new StringBuilder(); FileInputStream fileInputStream = new FileInputStream(file); byte[] buf = new byte[10 * 1024]; int readLenth = 0; while ((readLenth = fileInputStream.read(buf)) != -1) { returnDatas.append(new String(buf,0,readLenth)); } fileInputStream.close(); return returnDatas.toString(); } // 字符串转文件 public static void StringTobyte(String str,File file) throws Exception { FileOutputStream fileOutputStream = new FileOutputStream(file); fileOutputStream.write(str.getBytes()); fileOutputStream.close(); } 代码大意:把一张图片通过字节流转成一个字符串,然后在获取该字符串的字节后还原为文件。理解中,字符只是多带一层编码,还原成字节后应该还是能获取到源文件的呀。
查看完整描述

3 回答

?
DIEA

TA贡献1820条经验 获得超3个赞

编码和解码不一定是无损的。你从一个图片文件读出一个能无损编解码的字节流的可能性非常小。

new String( new byte[] { 0xff } ).getBytes()
=>  [-17, -65, -67]
查看完整回答
反对 回复 2019-03-01
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

首先保证序列化,你可以用base64,才能保证转回来没问题

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 499 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号