2017-08-17 229 views
1

我正在用Android構建自定義文件創建應用程序。我試圖將Bytebuffer的內容寫入到一個字節類型的文件中,這些Bytebuffer是我創建的自定義類的String成員。但是,每當我這樣做時,我都以String格式獲取文件的內容。我已經嘗試了幾種方案,如使用get方法,一流的BufferedOutputStream,ByteArrayOutputStream類,DataOutputStream類,Filechannel類等。這裏是我的代碼:Java以字節格式將字節從字節緩衝區寫入文件

ByteBuffer byteBuffer = ByteBuffer.allocate(totalSize); 

    byteBuffer.put(hm.getDocID().getBytes()); 
    byteBuffer.put(hm.getFextension().getBytes()); 
    byteBuffer.put(hm.getMagic().getBytes()); 
    byteBuffer.put(hm.getFversion().getBytes()); 
    byteBuffer.put(hm.getFsize().getBytes()); 

    byteBuffer.flip(); 

    byte[] bablock = new byte[byteBuffer.remaining()]; 

    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(idHeader)); 

     bos.write(bablock); 
     bos.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

請讓我的idHeader文件內容如下:

12345678-1234-1234-1234-123456789abcjpgIDF1.00000166178

這是我所有的字符串連接。我想要做的是將與字節相同的內容寫入文件,而不是作爲人類可讀的字符串。我在這裏錯過了什麼?任何幫助表示讚賞。

回答

0

因此,不需要構建字符串並從中獲取字節數組,並將它們放到ByteBuffer並將其寫入文件,您需要直接寫入數據。我將擺脫ByteBuffer,並使用DataOutputStream的各種API編寫單個字節或整數或其他內容。

完全不清楚是否要將12345678寫爲8個字節或4字節整數,例如,如果沒有說明就不可能對您有所幫助。

+0

真的很感謝快速回復。我的想法是,我想向創建的文件附加一個唯一的文件ID(即hm.getDocID()。getBytes()),並能夠在用服務器讀取文件後檢索這些數據。你會建議將這個ID(12345678-1234-1234-1234-123456789)寫成8字節還是4字節? –

+0

它不適合4或8字節。如果包含連字符,則至少需要12個,14個。你的問題其實很不明確。你現在寫的方式究竟有什麼錯誤? – EJP

+0

直接使用DataOutputStream解決了我的問題!對於我這樣模糊的問題抱歉。謝謝您的幫助! –