2014-12-30 3 views
-1

Почему метод read() отличается при чтении общего количества байтов? Например,InputStream с использованием чтения и чтения (bytearray)

int n = System.in.read(); 
System.out.println("The total bytes are:"+System.in.available()); 

А в другом месте мы используем

byte [] in= new byte[30]; 
int n = System.in.read(byte); 
System.out.println("The total bytes are:"+System.in.available()); 

И слово Java был прочитан в обоих методах

Выход первого метода:

the total bytes are 5 

Где второй м Этот показатель составляет:

the total bytes are 6 

В чем разница между сохранением байтов между этими двумя методами?

+0

Ваш второй фрагмент кода не компилируется, отредактируйте ваш вопрос –

+0

Число байтов, доступных для чтения без блокировки с System.in, полностью зависит от того, как далеко вы указали вперед. – EJP

ответ

0

System.in.read() оно считывает значение из стандартного потока ввода.

byte [] in= new byte[30]; 
int n = System.in.read(byte); 
  • Он считывает значение из вашей в массиве.
+0

atish, ваши комментарии верны, но почему первый возвращает 5 байтов, а другой возвращает 6 байтов. Я знаю первую распечатку 5 байтов, потому что она берет CR, но как насчет чтения (байтов), который возвращает 6 байтов. –

+0

Ни то, ни другое не возвращает количество прочитанных байтов - метод возвращает минимальное количество байтов, которые все еще доступны для чтения. – BarrySW19

+0

@ BarrySW19 Метод read() возвращает количество прочитанных байтов. Метод available() возвращает количество байтов, которые можно читать без блокировки. * Ни один из них не возвращает «минимальное количество байтов, доступных для чтения». – EJP

1

Как Javadoc говорит о методе доступной(), это: «Возвращает оценку числа байт, которые могут быть считаны (или пропущено) от этого входного потока без блокировки пути следующий вызов метода для этого входного потока ».

Точный способ определения потока по этому счету не определен строго. В случае System.in он может использовать количество байтов, доступных в настоящее время во внутреннем буфере, или может делегировать вызов базовому входному потоку, который может быть зависимым от реализации (например, операционной системой). Единственное, что вы можете действительно определить из возвращаемого значения, - это количество байтов, которое вы можете безопасно читать без блокировки.

+0

BarrySW19, ваши комментарии высоко оценены, а также я прочитал Javadoc. На самом деле проблема связана с огромными данными из внутреннего буфера. Это приведет к путанице во многих случаях, используя эти два метода. –

+0

@ MehdiAcademic2014 На самом деле вы просто догадываетесь о простом существовании «огромного дата из внутреннего буфера», не говоря уже о его влиянии на эту проблему, если таковая имеется. – EJP

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