小编faz*_*faz的帖子

读取大文件时出现OutofMemoryError

我正在尝试阅读几个大文件(超过100MB).到目前为止,它总是在OutofMemory Error中间打破.有什么解决方案吗?

           FileInputStream fstream = new FileInputStream(f);
          // Get the object of DataInputStream
        DataInputStream dain = new DataInputStream(fstream);
        //  BufferedReader br = new BufferedReader(new InputStreamReader(in));

        BufferedReader in = new BufferedReader(new InputStreamReader(dain));
        String text = in.readLine();
        while(text != null) {
            stat(text);
            text = in.readLine();
        }
Run Code Online (Sandbox Code Playgroud)

例外是这样的:

    Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:2694)
at java.lang.String.<init>(String.java:234)
at java.io.BufferedReader.readLine(BufferedReader.java:349)
at java.io.BufferedReader.readLine(BufferedReader.java:382)
Run Code Online (Sandbox Code Playgroud)

以下是Stat的作用:

    public void stat(String text) {
    String postTypeId = this.getXmlValue(text, "PostTypeId");
    String viewCountStr = this.getXmlValue(text, "ViewCount");
    String answerCountStr = …
Run Code Online (Sandbox Code Playgroud)

java file-io

3
推荐指数
1
解决办法
4032
查看次数

为什么我的hashset如此耗费内存?

我发现我的程序正在增加的内存是因为下面的代码,目前我正在读一个大约7GB的文件,我相信将存储在hashset中的那个比10M的课程,但我的程序的内存持续增加到300MB,然后由于OutofMemoryError而崩溃.如果是Hashset问题,我应该选择哪种数据结构?

    if(tagsStr!=null) {
        if(tagsStr.contains("a")||tagsStr.contains("b")||tagsStr.contains("c")) {
            maTable.add(postId);
        }
    } else {
        if(maTable.contains(parentId)) {
            //do sth else, no memories added here
        }
    }
Run Code Online (Sandbox Code Playgroud)

java hashset

3
推荐指数
1
解决办法
3491
查看次数

标签 统计

java ×2

file-io ×1

hashset ×1