2016-03-18 2 views
0

чтения я следующий код, который считывает байты из файла и распечатать его:Диапазон значения, возвращаемого InputStream функции

public static void main(String[] args) throws FileNotFoundException, IOException { 

    try (InputStream is = new FileInputStream("myFile")) { 
     byte[] bytes = new byte[3]; 
     while (is.read(bytes) != -1) { 
      System.out.println("bytes = " + Arrays.toString(bytes)); 
     } 
    } 
} 

Вот содержание Myfile:

AAABBB|||ùùù 

Вот результат:

bytes = [65, 65, 65] 
bytes = [66, 66, 66] 
bytes = [124, 124, 124] 
bytes = [-7, -7, -7] 

Мой вопрос, так как диапазон значений байта составляет - 128 127, это нормально с ee отрицательное значение на выходе. Тем не менее, Javadoc из() метода InputStream.read говорит

Значение байта возвращается как Int в диапазоне от 0 до 255

Не это немного неоднозначным? Как int (от 0 до 255) сопоставляется с байтом (от 128 до 127)?

Спасибо.

ответ

0

Во-первых, вы звоните int read(byte b[]) не int read(). Вы можете проверить это:

try (InputStream is = new FileInputStream("myFile")) { 
     int i; 
     while (true) { 
      i = is.read(); 
      if (i == -1) break; 
      System.out.println(i); 
     } 
    } 

и Во-вторых, Может быть, вы хотите знать, размер байт, так как ùùù являются символы Юникода, каждый юникод символов требуется 2 байта в Java