我正在尝试使用多个线程拆分文本文件。该文件为 1 GB。我正在按字符读取文件。执行时间为 24 分 54 秒。不是按字符读取文件是他们减少执行时间的更好方法。我很难找到一种可以减少执行时间的方法。如果还有其他更好的方法可以用多个线程拆分文件,也请给我建议。我对java很陌生。任何帮助将不胜感激。:) public static void main(String[] args) throws Exception { RandomAccessFile raf = new RandomAccessFile("D:\\sample\\file.txt", "r"); long numSplits = 10; long sourceSize = raf.length(); System.out.println("file length:" + sourceSize); long bytesPerSplit = sourceSize / numSplits; long remainingBytes = sourceSize % numSplits; int maxReadBufferSize = 9 * 1024; List<String> filePositionList = new ArrayList<String>(); long startPosition = 0; long endPosition = bytesPerSplit; for (int i = 0; i < numSplits; i++) { raf.seek(endPosition); String strData = raf.readLine(); if (strData != null) { endPosition = endPosition + strData.length(); } String str = startPosition + "|" + endPosition; if (sourceSize > endPosition) { startPosition = endPosition; endPosition = startPosition + bytesPerSplit; } else { break; } filePositionList.add(str); } for (int i = 0; i < filePositionList.size(); i++) { String str = filePositionList.get(i); String[] strArr = str.split("\\|"); String strStartPosition = strArr[0]; String strEndPosition = strArr[1]; long startPositionFile = Long.parseLong(strStartPosition); long endPositionFile = Long.parseLong(strEndPosition); MultithreadedSplit objMultithreadedSplit = new MultithreadedSplit(startPositionFile, endPositionFile); objMultithreadedSplit.start(); } long endTime = System.currentTimeMillis(); System.out.println("It took " + (endTime - startTime) + " milliseconds"); }}
添加回答
举报
0/150
提交
取消