2011-08-08 117 views
15

我試圖將數據寫入二進制格式的文件進行壓縮。數據完全由浮點組成,因此我決定將數據量化爲介於0和65535之間的整數,因此可以將數據寫成兩位無符號整數並最終節省空間。但是,我需要將這些量化的數據以二進制形式輸出到文件中,而不是可讀的Ascii。如何將二進制數據輸出到Java中的文件?

目前,這是我在做什麼

@param OUTPUTFILE包含已量化數據作爲字符串.txt文件

public void generateBinaryRioFile(String materialLibrary, 
     String outputFile, String group, String mtlAux) { 

    try { 

     // Create file 
     FileWriter fileStream = new FileWriter(outputFile); 
     try { 

      BufferedReader br = new BufferedReader(new FileReader(new File(
        "idx.txt"))); 

      while ((line = br.readLine()) != null) { 
       writer.write(line + "\n"); 
      } 
      try { 
       br.close(); 

      } catch (FileNotFoundException e) { 
       e.getMessage(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      }   BufferedWriter writer = new BufferedWriter(fileStream); 

然而,文件寫入到文件一個可讀的字符串。我需要它被寫成二進制數據。在Java中如何去做這件事?

+0

背後的動機是什麼? –

+1

顯示一些代碼,你迄今爲止做了什麼,所以我可以幫你在它 –

+0

@ Kit Ho 我的老闆告訴我,它的動機是保存文件空間,而不是寫一個文件多個ascii字符增加文件大小,它可以用二進制寫入以節省空間。 該文件將通過互聯網發送,用於在webgl中生成3d模型的數據。我們希望模型儘可能快地加載 – deztructicus

回答

32

也許這個片段會有所幫助。

int i = 42; 
DataOutputStream os = new DataOutputStream(new FileOutputStream("C:\\binout.dat")); 
os.writeInt(i); 
os.close(); 
+0

簡單:) :) –

+2

如果你只想寫2個字節'writeShort()' –

+2

@Ratchet怪胎Java的短-32,768到32,767(根據http://download.oracle.com/javase/tutorial /java/nutsandbolts/datatypes.html)。如果OP使用Java short(這是一個好主意,謝謝),他應該在寫作前減去32,768,讀完後再加上32,768。 – rajah9

2

那麼DataOutputStream怎麼樣。您可以編寫包含2個數據整數的int。

DataOutputStream dos = new DataOutputStream(new FileOutputStream(<path>)); 
ArrayList<Integer> list = new ArrayList<Integer>(); 
int sum; 
for(int i = 0; i < list.size(); i++) { 
    if(i%2!=0){ 
     sum |= list.get(i).intValue()<<16; 
     dos.writeInt(sum); 
    } else { 
     sum = list.get(i).intValue(); 
    } 
} 
相關問題