java - 位元組流轉成字串之後,在透過字串轉成位元組流後的檔案為什麼會不一樣?
ringa_lee
ringa_lee 2017-04-18 10:53:53
0
3
892
 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();
    }
    
    

代碼大意:把一張圖片通過字節流轉成一個字符串,然後在獲取該字符串的字節後還原為文件。
理解中,字符隻是多帶一層編碼,還原成字節後應該還是能獲取到源文件的呀。

ringa_lee
ringa_lee

ringa_lee

全部回覆(3)
黄舟
        while ((readLenth = fileInputStream.read(buf)) != -1) {
            returnDatas.append(new String(buf,0,readLenth));
        }

二進位圖片檔案read出來的不是合法的字串,其中無法解析的二進位資料會被濾掉
參考 javadoc 中的描述:

This method always replaces malformed-input and unmappable-character sequences with this charset's default replacement string.

迷茫

編碼和解碼不一定是無損的。你從一個圖片檔案讀出一個能無損編解碼的位元組流的可能性非常小。

new String( new byte[] { 0xff } ).getBytes()
=>  [-17, -65, -67]
Ty80

先保證序列化,你可以用base64,才能保證轉回沒問題

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板