2014-09-27 6 views
0

Я генерирую случайные ints и пытаюсь записать их в файл. Проблема в том, что когда я открываю созданный файл, я не нахожу свои ints, а набор символов, таких как квадраты и т. Д. Является ли это проблемой кодирования?Запись int в файл с использованием DataOutputStream

import java.io.DataOutputStream; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class GenerateBigList { 

    public static void main(String[] args) { 
     //generate in memory big list of numbers in [0, 100] 
     List list = new ArrayList<Integer>(1000); 
     for (int i = 0; i < 1000; i++) { 
      Double randDouble = Math.random() * 100; 
      int randInt = randDouble.intValue(); 
      list.add(randInt); 
     } 

     //write it down to disk 
     File file = new File("tmpFileSort.txt"); 
     try { 

      FileOutputStream fos = new FileOutputStream("C:/tmp/tmpFileSort.txt"); 
      DataOutputStream dos = new DataOutputStream(fos); 
      writeListInteger(list, dos); 
      dos.close();  

     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private static void writeListInteger(List<Integer> list, DataOutputStream dos) throws IOException { 
     for (Integer elt : list) { 
      dos.writeInt(elt); 
     } 
    } 

} 

Частичное копирование вставка из созданного файла:

/ O a C ?  6 N  

ответ

0

Этих "символы" ваши Интсы. Вот как выглядят бинарные файлы, если вы открываете их в текстовом редакторе. Обратите внимание, что размер файла составляет 4000 байт, и вы написали 1000 ints по 4 байта каждый.

Если прочитать файл с DataInputStream вы получите исходные значения обратно:

try (DataInputStream dis = new DataInputStream(
    new BufferedInputStream(new FileInputStream("C:/tmp/tmpFileSort.txt")))) { 
    for (int i = 0; i < 1000; i++) { 
     System.out.println(dis.readInt()); 
    } 
} catch (IOException e) { 
    throw new RuntimeException(e); 
} 
2

Из doc:

public final void writeInt(int v) throws IOException 
    Writes an int to the underlying output stream as four bytes, high byte first. If no exception is thrown, the counter written is incremented by 4. 

Там нет никаких проблем кодирования. Это то, что вы видите, когда вы открываете двоичный файл с помощью текстового редактора. Попробуйте открыть с помощью шестнадцатеричного редактора.

0

Он пишет двоичный код, а не текст. Ваши ожидания неуместны. Если вы хотите текст, используйте Writer.

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