2013-06-06 2 views
8

Согласно the documentation, BufferedReader(Reader) использует размер буфера по умолчанию, а второй конструктор BufferedReader(Reader, int) позволяет установить размер буфера.Размер буфера BufferedReader по умолчанию?

общественный BufferedReader (Читатель в)

Создает символы входного потока буферного, который использует буфер ввода по умолчанию размера.

Однако в документах не упоминается, что такое размер буфера по умолчанию.

Каков размер буфера по умолчанию для BufferedReader?

+0

[BufferedReader] (http://ulibgcj.sourceforge.net/javadoc/java/io/BufferedReader.html#BufferedReader (java.io.Reader)) может вас заинтересовать – Smit

+0

@ Vulcan EJP дал вам неправильный ответ. как я сказал, что я добавил реальный .jar, содержащий BufferedReader, и посмотрел на него. возможно, это было другим способом в течение нескольких лет, или будет другим способом в будущем, но теперь это строго указано 8192 в java.io.BufferedReader !!! – IAM

+0

@ Vulcan android был примером документации. фактическое доказательство следовало позже. но поскольку android также использует rt.jar, транзитно документация достаточно. – IAM

ответ

8

Размер буфера по умолчанию 8192 символов

http://developer.android.com/reference/java/io/BufferedReader.html

BufferedReader(Reader in) 
Constructs a new BufferedReader, providing in with a buffer of 8192 characters. 

Помимо этой документации, я extraced в rt.jar архив и декомпилировали BufferedReader.class от Явы .io. * используя JD-GUI, это то, что я нашел в определении класса:

private static int defaultCharBufferSize = 8192; 
+1

Возможно, вы правы, но официальные документы не говорят, что: http://docs.oracle.com/javase/7/docs/api/ – 7stud

+0

@ 7stud Взгляните на ссылку, приведенную в моем комментарии. – Smit

+1

@ Считайте, Назад на ya: взгляните на ссылку oracle в своем комментарии. – 7stud

1

Я уверен Я думаю, что это зависит от системы/jvm. Запустить эту программу:

What are the default buffer size for java.io.BufferedInputStream on old and exotic JVMs?

import java.io.BufferedInputStream; 
import java.io.InputStream; 

public class BufferSizeDetector extends BufferedInputStream { 
    public static void main(String[] args) { 
     BufferSizeDetector bsd = new BufferSizeDetector(null); 

     System.err.println(System.getProperty("java.version")); 
     System.err.println(bsd.getBufferSize()); 
    } 

    public BufferSizeDetector(InputStream in) { 
     super(in); 
    } 

    public int getBufferSize() { 
     return super.buf.length; 
    } 
} 

я получаю:

1.6.0_45 
8192 
+3

Интересно, но что гарантирует, что 'BufferedReader' и' BufferedInputStream' имеют одинаковый размер буфера по умолчанию? – Vulcan

+0

@ Vulcan, Хорошая точка. (Класс Stupid BufferedReader не имеет поля buf). – 7stud

+0

@ 7stud Что именно глупо об этом? – EJP

2

Не указано. Нарочно. Это было 4096 в течение нескольких лет в Sun/Oracle Java JDK, но не полагаться на него.

+0

Возможно, это зависит от платформы, но это [** 8192 ** на текущем Android] (https://github.com/google/j2objc/blob/master/jre_emul/android/libcore/luni/src/main/java/ Java/IO/BufferedInputStream.java # L44). – pevik

+0

@Pevik Ваша ссылка на 'BufferedInputStream', и вопрос о' BufferedReader'. – EJP

Смежные вопросы