【发布时间】:2018-10-24 09:06:30
【问题描述】:
我的最终目标是将文件从 ANSI 转换为 UTF-8。为此,我使用了一些 Java 代码:
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class ConvertFromAnsiToUtf8 {
public static void main(String[] args) throws IOException {
try {
Path p = Paths.get("C:\\shared_to_vm\\test_encode\\test.csv");
ByteBuffer bb = ByteBuffer.wrap(Files.readAllBytes(p));
CharBuffer cb = Charset.forName("windows-1252").decode(bb);
bb = Charset.forName("UTF-8").encode(cb);
Files.write(p, bb.array());
} catch (Exception e) {
System.out.println(e);
}
}
}
当我在小文件上测试代码时,它可以完美运行。我的文件从 ANSI 转换为 UTF-8,所有字符都被识别和编码。但是,一旦我尝试在需要转换的文件上使用它,就会收到错误 java.lang.OutOfMemoryError: Java heap space。
就我的理解而言,我的文件中有大约 150 万行,所以我很确定我用我的应用程序创建了太多的对象。
当然,我已经检查过这个错误的含义以及如何解决它(例如here 或here),但是提高我的 JVM 的内存容量是解决它的唯一方法吗?如果是,我应该使用多少?
任何形式的帮助(提示、建议、链接或其他)将不胜感激!
【问题讨论】:
标签: java utf-8 heap-memory ansi