2015-12-29 4 views
0

Я пишу байт [] для записи и чтения. Но почему байт [] отличается от записи и чтения? Вот мой код:Записать байт [] в файл и прочитать байт [] из файла

import java.io.*; 

public class test{ 
    public static void main(String argv[]){ 
     try{ 
      byte[] Write = "1234567812345678".getBytes(); 
      byte[] Read = new byte[16]; 

      File test_file = new File("test_file"); 
      test_file.mkdir(); 

      String path = new String(test_file.getAbsolutePath()+"\\"+"test.txt"); 
      File test_out = new File(path); 
      test_out.createNewFile(); 

      BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(test_out)); 
      out.write(Write); 
      out.close(); 

      File test_in = new File(path); 
      BufferedInputStream in = new BufferedInputStream(new FileInputStream(test_in)); 
      while(in.available()>0) 
       in.read(Read); 
      in.close(); 

      System.out.println(Write); 
      System.out.println(Read); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

И вот вывод; вход и выход различны:

[[email protected] 
[[email protected] 
+0

, что по умолчанию 'ToString() по' для массивов – Ramanlfc

ответ

1

[B @ 139a55
[B @ 1db9742

Те выходы печати byte[] - это хэш-код объекта. Он не имеет ничего общего с его фактическим содержанием.

Это только говорит вам, что вы печатаете два разных объекта - их содержимое все равно может быть одинаковым.

Вы должны вместо этого напечатать фактическое содержимое массива байтов: What's the simplest way to print a Java array?

+0

Это случайно сгенерированный хэш-код, а не адрес объекта, несмотря на документацию. –

0

При печати byte[], что так, как вы печатаете объектную ссылку на JVM, а не содержимое массива.

Попробуйте это:

System.out.println(Arrays.toString(Write)); 
System.out.println(Arrays.toString(Read)); 
Смежные вопросы