我在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();
}
有什么可疑的吗?
提前感谢您的帮助!
答案 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"));