作者litleaf (^^ )
看板java
标题Re: BufferedReader一问
时间Sat Jun 2 02:54:51 2007
初心者问一下大家
我要做的东西是大量读文字档并做比对的工具
发现 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