Hamster
Well-Known Member
Да вся проблема в этом файлике. Дело в том, что чтобы посоветовать свои дурные мысли, их нужно проверить на практике. Итак, удалось создать текстовый файл, максимум 322 Мб и натыкать туда хз сколько бугаг. (Вот почему я и просил файл)
jdk 1.6 /Win7
Использование паттернов - довольно не "легкая" штука.
Твой код у меня выполнился за 8,5 сек
Удаляя все, что связано с паттернами и изменяя строчку :
java Test
Process started >>>
TimeMillis: 4121: sec: 4.121 bugag: 421
<<< Process finished.
Почему бы не побаловаться с классами пакета nio...
java Test2
Process started >>>
TimeMillis: 3435 sec: 3.435 bugag: 421
<<< Process finished.
Здесь результат чисто зависит от объема буфера. Его нужно оптимально подобрать. (Особо с ним не игрался, но при коэффициенте 2500 уже идет возрастание времени).
У меня бугаги находятся между собой дальше, чем объем буфера, поэтому тут нада не профтыкать. но это уже мелочи.
Вот так от 8,5 до 3,4. А может можно еще быстрее?:?
jdk 1.6 /Win7
Использование паттернов - довольно не "легкая" штука.
Твой код у меня выполнился за 8,5 сек
Удаляя все, что связано с паттернами и изменяя строчку :
Код:
public class Test {
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis(); // start timing
BufferedReader reader = new BufferedReader(new FileReader("d:/www.log"));
String line;
int c = 0;
while ((line = reader.readLine()) != null) {
if (line.indexOf("Bugaga")>=0)
c++;
}
long stop = System.currentTimeMillis(); // stop timing
System.out.println("TimeMillis: " + (stop - start)+": sec: "+(stop - start)/1000.0+" bugag: "+c);
}
}
Process started >>>
TimeMillis: 4121: sec: 4.121 bugag: 421
<<< Process finished.
Почему бы не побаловаться с классами пакета nio...
Код:
class Test2{
public static void main(String[] args) throws IOException {
long start = System.currentTimeMillis(); // start timing
ReadableByteChannel fc = Channels.newChannel(new FileInputStream("d:/www.log"));
int c = 0;
ByteBuffer buf = ByteBuffer.allocate("Bugaga".getBytes().length*1000);
while(fc.read(buf)>=0){
CharBuffer cbuf = Charset.forName("cp866").decode((ByteBuffer)buf.flip());
buf.clear();
if(cbuf.toString().indexOf("Bugaga")>=0 ){
c++;
}
}
long stop = System.currentTimeMillis(); // stop timing
System.out.println("TimeMillis: " + (stop - start)+" sec: "+(stop - start)/1000.0+" bugag: "+c);
}
}
Process started >>>
TimeMillis: 3435 sec: 3.435 bugag: 421
<<< Process finished.
Здесь результат чисто зависит от объема буфера. Его нужно оптимально подобрать. (Особо с ним не игрался, но при коэффициенте 2500 уже идет возрастание времени).
У меня бугаги находятся между собой дальше, чем объем буфера, поэтому тут нада не профтыкать. но это уже мелочи.
Вот так от 8,5 до 3,4. А может можно еще быстрее?:?