国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java讀取600萬(wàn)行的txt文件,內(nèi)存溢出解決方案

這篇具有很好參考價(jià)值的文章主要介紹了Java讀取600萬(wàn)行的txt文件,內(nèi)存溢出解決方案。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

可能造成內(nèi)存溢出的原因:

  1. 一次性把txt文件讀取到內(nèi)存
  2. 頻繁的new對(duì)象

實(shí)體類(lèi)


import lombok.Data;
import java.io.Serializable;

/**
 * @author cpf
 * @date 2024/4/13 14:40
 */
@Data
public class User implements Serializable{

    private String user;

    private String positioningTime;

    private String latitude;

    private String longitude;

    private String locationId;

    public void clear() {
        setUser(null);
        setPositioningTime(null);
        setLatitude(null);
        setLongitude(null);
        setLocationId(null);
    }
}

可以使用對(duì)象池解決頻繁new對(duì)象的問(wèn)題
解決一次性把文件讀取到內(nèi)存: 可以使用文件流方式,使用java.util.Scanner類(lèi)掃描文件的內(nèi)容,一行一行連續(xù)地讀取文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-850883.html



import org.example.entity.User;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.*;

/**
 * @author cpf
 * @date 2024/4/13 15:45
 */
public class TestMe {

    private static final int USER_POOL_SIZE = 100; // 根據(jù)實(shí)際情況調(diào)整對(duì)象池大小

    private static Queue<User> userPool = new LinkedList<>();

    static {
        // 預(yù)先創(chuàng)建對(duì)象池中的User實(shí)例
        for (int i = 0; i < USER_POOL_SIZE; i++) {
            userPool.offer(new User());
        }
    }

    public static void main(String[] args) {
     
        String filePath = "src/main/resources/Gowalla_totalCheckins.txt";
        List<User> users = readData(filePath);
        for (int i = 0; i < 20; i++) {
            // 獲取一個(gè)1-6000000的隨機(jī)數(shù)
            int random = (int) (Math.random() * 6000000);
            System.out.println("第"+ random +"個(gè)數(shù)據(jù): " + users.get(random));
        }
        System.out.println(users.size());


    }

    private static List<User> readData(String filePath) {
        List<User> userList = new ArrayList<>();
        FileInputStream fis  = null;
        Scanner sc = null;
        try {
            fis = new FileInputStream(filePath);
            sc = new Scanner(fis, "UTF-8");
            while (sc.hasNextLine()) {
                String line = sc.nextLine();
                User user = parseLine(line);
                if (user != null) {
                    userList.add(user);
                }
                // 在主程序中,使用完User對(duì)象后應(yīng)將其歸還到對(duì)象池
                userPool.offer(user);
            }
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            if (sc != null) {
                sc.close();
            }
        }


        return userList;
    }


    private static User parseLine(String line) {
        String[] data = line.split("\t");
        if (data.length < 5) {
            System.err.println("數(shù)據(jù)格式錯(cuò)誤:需要至少包含5個(gè)字段。");
            return null;
        }
        // 從對(duì)象池中獲取一個(gè)User實(shí)例
        User user = userPool.poll();
        if (user == null) {
            // 對(duì)象池為空時(shí),創(chuàng)建新的User實(shí)例
            user = new User();
        }
        // 清除原有數(shù)據(jù)并填充新行數(shù)據(jù)
        user.clear();
        user.setUser(data[0]);
        user.setPositioningTime(data[1]);
        user.setLatitude(data[2]);
        user.setLongitude(data[3]);
        user.setLocationId(data[4]);

        return user;
    }


}

到了這里,關(guān)于Java讀取600萬(wàn)行的txt文件,內(nèi)存溢出解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java讀取并解析txt文件

    java讀取并解析txt文件

    利用org.json即可實(shí)現(xiàn) 先利用IO流讀取txt文件,讀取每行內(nèi)容并轉(zhuǎn)為普通字符串(json形式的格式一定要正確),再將其轉(zhuǎn)為JSONObject對(duì)象,通過(guò)JSONObject對(duì)象來(lái)取不同類(lèi)型的值。 txt文件內(nèi)容格式如下: 代碼如下(示例): 如果txt文件的格式不符合json格式要求的話,會(huì)在JSONObjec

    2024年02月16日
    瀏覽(23)
  • Java 內(nèi)存溢出(二)使用 MAT 分析 .hprof 內(nèi)存映像文件

    Java 內(nèi)存溢出(二)使用 MAT 分析 .hprof 內(nèi)存映像文件

    .hprof 文件: 是 java 項(xiàng)目的 Heap Dump 文件,也叫內(nèi)存映像文件、內(nèi)存快照文件,可以存放一個(gè) java 進(jìn)程在某個(gè)時(shí)間點(diǎn)的內(nèi)存快照。生成 Heap Dump 文件的方式有兩種:一是使用 jmap 命令手動(dòng)導(dǎo)出,二是啟動(dòng)腳本中添加 -XX:+HeapDumpOnOutOfMemoryError 參數(shù)自動(dòng)導(dǎo)出。本文中只涉及第二種。

    2023年04月08日
    瀏覽(36)
  • 開(kāi)發(fā)筆記之:文件讀取值溢出bug分析(JAVA版)

    開(kāi)發(fā)筆記之:文件讀取值溢出bug分析(JAVA版)

    (1)引言 ?以下是Java讀取數(shù)據(jù)文件(FileInputStream)的代碼: ?其意圖很簡(jiǎn)單:從當(dāng)前游標(biāo)位置讀取一個(gè)雙字(4字節(jié))數(shù)據(jù)。 稍微復(fù)雜一點(diǎn)的就是一個(gè)字節(jié)序的考慮。 (2)問(wèn)題 ?該代碼做UT(單元測(cè)試)時(shí),遇到了讀取中斷的問(wèn)題(就是文件還沒(méi)讀取完就提前中斷了)。

    2024年02月05日
    瀏覽(18)
  • 【Java流式下載大文件,避免OOM內(nèi)存溢出】

    Java下載文件時(shí),如果是小文件的下載,我們一般直接使用工具類(lèi)的方法,比如cn.hutool.http.HttpUtil.downloadFile()。但是如果是大文件的下載,使用這些工具類(lèi)的方法,可能會(huì)出現(xiàn)Out of Memory內(nèi)存溢出,它是指需要的內(nèi)存空間大于系統(tǒng)分配的內(nèi)存空間,oom后果就是項(xiàng)目程序crash,Hpr

    2024年02月11日
    瀏覽(17)
  • python讀取文件指定行的三種方法

    在python中如果要將一個(gè)文件完全加載到內(nèi)存中,通過(guò)file.readlines()即可,但是在文件占用較高時(shí),我們是無(wú)法完整的將文件加載到內(nèi)存中的,這時(shí)候就需要用到python的file.readline()進(jìn)行迭代式的逐行讀?。?這里我們的實(shí)現(xiàn)方式是先用一個(gè)with語(yǔ)句打開(kāi)一個(gè)文件,然后用readline()函數(shù)

    2024年04月28日
    瀏覽(94)
  • Java中的內(nèi)存泄露、內(nèi)存溢出與棧溢出

    大家好,我是歐陽(yáng)方超。本次就Java中幾個(gè)相似而又不同的概念做一下介紹。內(nèi)存泄漏、內(nèi)存溢出和棧溢出都是與內(nèi)存相關(guān)的問(wèn)題,但它們之間有所不同。 我們經(jīng)常會(huì)遇到內(nèi)存泄漏、內(nèi)存溢出和棧溢出等問(wèn)題,這些問(wèn)題都與內(nèi)存的使用有關(guān)。 內(nèi)存泄漏(memory leak)指的是程序

    2024年02月03日
    瀏覽(23)
  • Python讀取txt文件

    Python是一種流行的編程語(yǔ)言,提供了許多處理文件的功能。在Python中,我們可以使用內(nèi)置的文件操作函數(shù)來(lái)讀取和處理文本文件,包括讀取txt文件。本文將介紹如何使用Python讀取txt文件,并提供相應(yīng)的源代碼。 打開(kāi)文件 要讀取一個(gè)txt文件,首先需要使用Python的內(nèi)置函數(shù) ope

    2024年02月06日
    瀏覽(23)
  • Android 讀取Txt文件內(nèi)容

    View Code 一個(gè)獲取InputStream中字符串內(nèi)容的方法:傳入一個(gè)InputStream,返回其中的文本內(nèi)容。 View Code 以gbk編碼讀取內(nèi)容,不同的文本文件可能編碼不同,如果出現(xiàn)亂碼,可能需要調(diào)整編碼。 手機(jī)測(cè)試有安卓版本限制、生產(chǎn)廠家限制,如:某OS

    2024年02月17日
    瀏覽(27)
  • 堆內(nèi)存溢出自動(dòng)生成DUMP文件

    如果發(fā)生了內(nèi)存泄露,如果好重現(xiàn),使用JVisualvm,或者jmap,Jprofiler進(jìn)行Heap Dump,使用MAT進(jìn)行分析。但不好重現(xiàn)的話,可以打開(kāi)JVM的HeapDumpOnOutOfMemoryError參數(shù),待到有了Heap Dump再使用MAT等工具分析。 說(shuō)明: 通過(guò)jvm參數(shù)-XX:+HeapDumpOnOutOfMemoryError可以讓JVM在出現(xiàn)內(nèi)存溢出時(shí)候Dump出當(dāng)前

    2024年02月16日
    瀏覽(20)
  • Qt 實(shí)例3 讀取txt文件

    Qt 實(shí)例3 讀取txt文件

    通過(guò)簡(jiǎn)單實(shí)例小程序,實(shí)現(xiàn)txt文件讀取展示。 1、創(chuàng)建工程并進(jìn)行界面設(shè)計(jì)。創(chuàng)建基于QWidget基類(lèi)的Qt界面應(yīng)用程序,并在主界面添加相關(guān)控件如下: 界面控件依次為:QLabel、QLineEdit、QPushButton、QTextEdit。 2、創(chuàng)建并綁定槽函數(shù) .h頭文件創(chuàng)建槽函數(shù): .cpp源文件構(gòu)造函數(shù)內(nèi)綁定槽

    2024年02月11日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包