Re: BufferedReader一問

看板java作者 (^^ )時間17年前 (2007/06/02 02:54), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
初心者問一下大家 我要做的東西是大量讀文字檔並做比對的工具 發現 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
文章代碼(AID): #16O6jyFR (java)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #16O6jyFR (java)