2011-08-08 29 views
15

Tôi đang cố ghi dữ liệu vào một tệp ở định dạng nhị phân để nén. Dữ liệu bao gồm toàn bộ các điểm trôi nổi vì vậy tôi đã quyết định định lượng dữ liệu thành một bộ xen kẽ giữa 0 và 65535 để dữ liệu có thể được viết dưới dạng hai số nguyên không dấu và cuối cùng tiết kiệm không gian. Tuy nhiên, tôi cần phải xuất dữ liệu lượng tử đó thành một tệp theo dạng nhị phân thay vì Ascii có thể đọc được.Làm cách nào để xuất dữ liệu nhị phân vào một tệp trong Java?

Tại thời điểm này đây là những gì tôi đang làm

@ param outputFile tập tin có chứa các dữ liệu đã được lượng tử hóa như các chuỗi trong một file .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); 

Tuy nhiên đó ghi vào nội dung tập tin một chuỗi có thể đọc được của con người. Tôi cần nó được viết dưới dạng dữ liệu nhị phân. Làm thế nào để thực hiện điều này trong Java?

+0

Động lực của bạn là gì? –

+1

Hiển thị một số mã mà bạn đã làm cho đến thời điểm này để tôi có thể giúp bạn trên đó –

+0

@ Kit Ho Tôi đã nói với ông chủ của tôi rằng động lực đằng sau đó là tiết kiệm dung lượng tệp thay vì viết nhiều ký tự ascii vào một tệp tăng kích cỡ, nó có thể được viết bằng nhị phân để tiết kiệm không gian. Tệp sẽ được gửi qua internet và dữ liệu được sử dụng để tạo mô hình 3D trong webgl. Chúng tôi muốn mô hình tải nhanh nhất có thể – deztructicus

Trả lời

32

Có lẽ đoạn này sẽ hữu ích.

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

đơn giản như vậy :) –

+2

nếu bạn chỉ muốn viết 2 byte sử dụng 'writeShort()' –

+2

@Ratchet freak Java ngắn khoảng từ -32,768 đến 32,767 (theo http://download.oracle.com/javase/tutorial /java/nutsandbolts/datatypes.html). Nếu OP sử dụng Java ngắn (đó là một ý tưởng tuyệt vời, cảm ơn bạn) anh ta nên trừ 32.768 trước khi viết và thêm 32.768 sau khi đọc. – rajah9

2

Còn về DataOutputStream. Bạn có thể viết int chứa 2 số nguyên dữ liệu của bạn.

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(); 
    } 
} 
Các vấn đề liên quan