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

répondre à tous(3)
黄舟
        while ((readLenth = fileInputStream.read(buf)) != -1) {
            returnDatas.append(new String(buf,0,readLenth));
        }

Le fichier image binaire lu n'est pas une chaîne légale, et les données binaires qui ne peuvent pas être analysées seront filtrées
Se référer à la description dans javadoc :

Cette méthode remplace toujours les séquences d'entrées malformées et de caractères non mappables par la chaîne de remplacement par défaut de ce jeu de caractères.

迷茫

L'encodage et le décodage ne sont pas nécessairement sans perte. La possibilité de lire un flux d'octets à partir d'un fichier image pouvant être codé et décodé sans perte est très faible.

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

Assurez-vous d'abord de la sérialisation. Vous pouvez utiliser base64 pour vous assurer qu'il n'y a aucun problème de reconversion.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!