将PNG加载为字符串并保存会破坏它

D18*_*180 0 java png load

我有程序,我必须加载PNG作为字符串,然后再次保存,但在我保存后,它变得不可读.如果我在编辑器中打开加载的PNG和保存的字符串,我可以看到java在整个文件中创建了换行符.如果这是问题所在,我该如何避免这种情况?

    public static void main(String[] args)
    {
        try
        {
            File file1 = new File("C://andim//testFile.png");
            StringBuffer content = new StringBuffer();
            BufferedReader reader = null;
            reader = new BufferedReader(new FileReader(file1));
            String s = null;         
            while ((s = reader.readLine()) != null) 
            {
                content.append(s).append(System.getProperty("line.separator"));                      
            }
            reader.close();
            String loaded=content.toString();
            File file2=new File("C://andim//testString.png");
            FileWriter filewriter = new FileWriter(file2);
            filewriter.write(loaded);           
            filewriter.flush();
            filewriter.close();
        }
        catch(Exception exception)
        {
            exception.printStackTrace();
        }

    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

我有程序,我必须加载PNG作为字符串,然后再次保存,但在我保存后,它变得不可读.

是的,我并不感到惊讶.您将任意二进制数据视为文本数据(无论您的平台默认编码是什么,都要引导).不是.不要那样做.在某些编码中你可能会使用它 - 直到你开始尝试将字符串传递到别处以剥离不可打印的字符等方式.

如果必须将任意二进制数据转换为文本,请使用base64或hex.如果可能,请尽量避免转换为文本.如果您只想复制文件,请使用InputStreamOutputStream- 而不是 ReaderWriter.

这是一个很重要的一点:只要你可能,就将数据保持在"原生"表示中.只有在必要时才将数据转换为不同的表示形式,并且要非常小心.