[英]Writing Bits to a file using BitSet & FileOutputStream
在將特定位寫入文件時,我遇到了一個問題。 如果這是任何重復的內容,我深表歉意,但是我進行的搜索找不到合理的答案。
我在以下方面遇到許多困難:
將文件頭(長整數)一點一點寫入(轉換為字節數組,以便FileOutputStream可以利用它)到文件中。
將單個位寫入文件。 例如,在某個階段,我需要將一個設置為0的位寫入文件,因此我最初的想法是使用BitSet,但是Java似乎將此視為null?
BitSet initialPadding = new BitSet(); initialPadding.set(0, false); fileOutputStream.write(initialPadding.toByteArray());
1)
我使用所需的文件名創建一個FileOutputStream,如下所示:
FileOutputStream fileOutputStream = new FileOutputStream(file.getAbsolutePath());
我試圖創建一個“ .amr”文件,因此在執行任何位操作之前的第一步是將標頭寫入文件的開頭。 具有以下值:
Long defaultHeader = 0x2321414d520aL;
我嘗試使用以下方法將其寫入文件,但我很確定它不會寫入正確的結果:
fileOutputStream.write(defaultHeader.byteValue());
我使用的是正確的流嗎? 我的convert依完全錯誤嗎?
2)
我有一個public BitSet fileBitSet;
從“ .raw”文件中讀取的位作為輸入。 我需要能夠從BitSet中提取某些位,以便稍后將其寫入文件。 我使用以下方法執行此操作:
public int getOctetPayloadHeader(int startPoint) {
int readLength = 0;
octetCMR = fileBitSet.get(0, 3);
octetRES = fileBitSet.get(4, 7);
if (octetRES.get(0, 3).isEmpty()) {
/* Keep constructing the payload header. */
octetFBit = fileBitSet.get(8, 8);
octetMode = fileBitSet.get(9, 12);
octetQuality = fileBitSet.get(13, 13);
octetPadding = fileBitSet.get(14, 15);
... }
考慮到有時可能需要我在fileBitSet
中的特定偏移量寫入單個位或81位,將這些位寫入文件的最佳方法是什么?
您只能寫一件事到OutputStream:字節。 您必須自己將位組成字節。 只有您知道規則如何將位組合為字節。
至於這樣的東西:
Long defaultHeader = 0x2321414d520aL;
fileOutputStream.write(defaultHeader.byteValue());
您應該仔細查看所使用方法的javadocs 。 byteValue()
返回一個字節; 所以它當然沒有按照您的期望做。 在Oracle教程中對使用流進行了很好的解釋: http : //docs.oracle.com/javase/tutorial/essential/io/streams.html
為了寫入單個位或一組位,您將需要一個自定義OutputStream,該處理將這些位分組為要寫入的字節。 那通常稱為BitStream (JDK中沒有此類); 您必須自己編寫(我強烈建議這樣做,它是一個很好的練習來教您有關位和字節的知識),或者在網上找到一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.