2011-08-08 15 views
15

मैं संपीड़न के लिए बाइनरी प्रारूप में फ़ाइल को डेटा लिखने की कोशिश कर रहा हूं। डेटा में पूरी तरह से फ़्लोटिंग पॉइंट्स शामिल हैं इसलिए मैंने डेटा को 0 और 65535 के बीच एक इंटरजेर्स को मापने का निर्णय लिया ताकि डेटा दो बिट हस्ताक्षरित पूर्णांक के रूप में लिखा जा सके और अंततः अंतरिक्ष को बचा सके। हालांकि, मुझे उस मात्राबद्ध डेटा को मानव-पठनीय असीसी के बजाय बाइनरी में फ़ाइल में आउटपुट करने की आवश्यकता है।जावा में फ़ाइल में बाइनरी डेटा कैसे आउटपुट करें?

इस समय मुझे लगता है कि के रूप में फाइल करने के लिए लिखता है एक .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); 

हालांकि फ़ाइल outputfile क्या कर रहा

@param है एक मानव पठनीय स्ट्रिंग। मुझे इसे बाइनरी डेटा के रूप में लिखा जाना चाहिए। जावा में ऐसा करने के बारे में कोई कैसे जाता है?

+0

आपकी प्रेरणा क्या है? –

+1

कुछ कोड दिखाएं जो आपने अभी तक किया है, इसलिए मैं आपकी मदद कर सकता हूं –

+0

@ किट हो मुझे अपने मालिक द्वारा बताया गया था कि इसके पीछे प्रेरणा फ़ाइल स्थान को सहेजना है ताकि फ़ाइल में एकाधिक असीसी अक्षरों को लिखने की बजाय फ़ाइल फाइलसाइज बढ़ाता है, इसे अंतरिक्ष बचाने के लिए बाइनरी में लिखा जा सकता है। फ़ाइल इंटरनेट पर और वेबग्ल में 3 डी मॉडल उत्पन्न करने के लिए उपयोग किए जाने वाले डेटा पर भेजा जाएगा। हम चाहते हैं कि मॉडल जितनी जल्दी हो सके लोड हो सके – 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 freak जावा लघु -32,768 से 32,767 तक है (http://download.oracle.com/javase/tutorial के अनुसार) /java/nutsandbolts/datatypes.html)। यदि ओपी जावा शॉर्ट का उपयोग करता है (जो एक अच्छा विचार है, धन्यवाद) उसे लिखने से पहले 32,768 घटा देना चाहिए और पढ़ने के बाद 32,768 जोड़ना चाहिए। – rajah9

2

DataOutputStream के बारे में क्या। आप int लिख सकते हैं जिसमें आपके 2 डेटा पूर्णांक होते हैं।

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(); 
    } 
} 
संबंधित मुद्दे