2014-09-27 53 views
0

我正在生成隨機整數並試圖將它們寫入文件。問題是,當我打開我創建的文件時,我沒有找到我的整數,但是有一組符號像正方形等等。它是編碼問題嗎?使用DataOutputStream將int寫入文件

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個整數,每個長度爲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。