java - 字节流转成字符串之后,在通过字符串转成字节流后的文件为什么会不一样?
ringa_lee
ringa_lee 2017-04-18 10:53:53
0
3
858
 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

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

Fail imej binari yang dibaca bukan rentetan undang-undang, dan data binari yang tidak boleh dihuraikan akan ditapis keluar
Rujuk penerangan dalam javadoc:

Kaedah ini sentiasa menggantikan urutan input yang tidak betul dan urutan aksara yang tidak boleh dipetakan dengan rentetan penggantian lalai set aksara ini.

迷茫

Pengekodan dan penyahkodan tidak semestinya tidak rugi. Kemungkinan anda membaca aliran bait daripada fail imej yang boleh dikodkan dan dinyahkod tanpa kehilangan adalah sangat kecil.

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

Mula-mula pastikan bersiri Anda boleh menggunakan base64 untuk memastikan tiada masalah untuk menukar semula.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan