尝试在Java中更改文件的编码是文件内容的两倍

时间:2014-04-09 16:22:27

标签: java character-encoding fileoutputstream

我在java中有一个FileOutputStream正在读取UDP数据包的内容并将它们保存到文件中。在阅读它们的最后,我有时想要转换文件的编码。问题是,目前在执行此操作时,它最终会使文件的所有内容加倍。我能想到的唯一解决方法是使用新编码创建临时文件,然后将其保存为原始文件,但这看起来太麻烦了。

我必须在我的代码中忽略一些东西:

if(mode.equals("netascii")){
                byte[] convert = new byte[(int)file.length()];
                FileInputStream input = new FileInputStream(file);
                input.read(convert);
                String temp = new String(convert);
                convert = Charset.forName("US-ASCII").encode(temp).array();
                fos.write(convert);
            }
            JOptionPane.showMessageDialog(frame, "Read Successful!");
            fos.close();
        }

有什么可疑的吗?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题是你从InputStream读取的字节数组将被转换为ascii chars,我假设它不是。在将其字节转换为String时指定InputStream编码,您将获得标准Java字符串。

我在这里假设UTF-16为InputStream的编码:

byte[] convert = new byte[(int)file.length()];
FileInputStream input = new FileInputStream(file);

// read file bytes until EOF
int r = input.read(convert);
while(r!=-1) r = input.read(convert,r,convert.length);

String temp = new String(convert, Charset.forName("UTF-16"));