Re: BufferedReader一問
初心者問一下大家
我要做的東西是大量讀文字檔並做比對的工具
發現 java 的讀文字檔有點慢,比 php 慢好多
(原本就是用下面的buffered reader)
爬了一下文發現精華區中的這個方法(file mapping)
不過卻跑不了 test 3 的範例程式耶
執行的結果如下 :
java.io.IOException: mmap not implemented
at java.nio.channels.FileChannelImpl.nio_mmap_file(long, long, int)
(/usr/lib64/libgcj.so.5.0.0)
at
java.nio.channels.FileChannelImpl.map(java.nio.channels.FileChannel$MapMode,
long, long) (/usr/lib64/libgcj.so.5.0.0)
at filemapping_test.main(java.lang.String[]) (Unknown Source)
訪問了 google 大神及查了不少資料卻沒甚麼結果 > <
不知道有哪位高手帥哥能幫我解決一下這個問題呢 ??
: ============================================================================
: test 2:: buffered reader
: 46ms 31ms 32ms 47ms 63ms
: ----------------------
: package other;
: import java.io.BufferedReader;
: import java.io.FileNotFoundException;
: import java.io.FileReader;
: import java.io.IOException;
: public class ReadUsingBufferedReader {
: public static void main(String[] args) {
: BufferedReader reader;
: int lineCount = 0;
: int selectLine = 7000;
: String str;
: try {
: reader = new BufferedReader(new FileReader("testData.txt"));
: long t1 = System.currentTimeMillis();
: do {
: lineCount++;
: reader.readLine();
: } while (lineCount != selectLine-1 && selectLine != 0
: && selectLine-1 <= 7000);
: str = reader.readLine();
: System.out.println(System.currentTimeMillis()-t1);
: reader.close();
: //System.out.println(str);
: } catch (FileNotFoundException e) {
: // TODO Auto-generated catch block
: e.printStackTrace();
: } catch (IOException e) {
: // TODO Auto-generated catch block
: e.printStackTrace();
: }
: }
: }
: ============================================================================
: test 3:: file mapping
: 16ms 15ms 16ms 0ms 16ms
: ----------------------
: package other;
: import java.io.File;
: import java.io.FileInputStream;
: import java.io.FileNotFoundException;
: import java.io.IOException;
: import java.nio.MappedByteBuffer;
: import java.nio.channels.FileChannel.MapMode;
: public class ReadUsingFileChannel {
: public static void main(String[] args) {
: try {
: File f = new File("testData.txt");
: FileInputStream fis = new FileInputStream(f);
: MappedByteBuffer mappedfile = fis.getChannel().map(
: MapMode.READ_ONLY, 0, f.length());
: int lineCount = 0;
: int selectLine = 7000;
: StringBuffer strBuffer = new StringBuffer();
: char c = '\0';
: long t1 = System.currentTimeMillis();
: do {
: c = (char) mappedfile.get();
: if (c == '\n') {
: lineCount++;
: }
: } while (lineCount != selectLine - 1 && selectLine != 0
: && selectLine - 1 <= 7000);
: c = (char) mappedfile.get();
: strBuffer.append(c);
: while (c != '\n') {
: c = (char) mappedfile.get();
: strBuffer.append(c);
: }
: System.out.println(System.currentTimeMillis()-t1);
: System.out.println(strBuffer);
: fis.close();
: } catch (FileNotFoundException e) {
: // TODO Auto-generated catch block
: e.printStackTrace();
: } catch (IOException e) {
: // TODO Auto-generated catch block
: e.printStackTrace();
: }
: }
: }
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.70.154.55
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
java 近期熱門文章
PTT數位生活區 即時熱門文章