簡體   English   中英

如何在java中的dataOutputstream中寫入位

[英]How to write bit in dataOutputstream in java

我想將 2 個字節的數據寫入一點。 我的位值是 00010000 00000000 這兩個字節的數據我想按位排列。

要求:

1 bit - 0
1 bit - 0 
1 bit - 0 
1 bit - 1
1 bit - 0 
1 bit - 0 
1 bit - 0 
1 bit - 0 


4 bit - 0
1 bit - 0 
1 bit - 0 
2 bit - 0

您不能將單個位寫入DataOutputStream OutputStreamInputStream繼承的所有 Java 類的 I/O 粒度都是 8 位字節。

這有幾個原因:

  • 效率 - 一次寫入一位數據的成本令人望而卻步。

  • 操作系統級 API(系統調用)不支持這一點; 閱讀 UNIX/Linux 手冊頁中的“man 2 read”和“man 2 write”。

  • 您寫入的地方(文件、套接字、管道等)都由操作系統建模,以 8 位字節作為數據粒度。 如果不提供 7 位,就不能向文件寫入 1 位。

  • 8 x N 位粒度向下應用於磁盤控制器、網絡接口等的硬件級別。 在網絡通信標准中……一直到 ISO/OSI 級別 1。


話雖如此,沒有什么能阻止您設計和實現您自己的 Java API,它允許您一次寫入(或讀取)1 位。 問題在於,當您開始與操作系統交互時(通過 Java I/O 類或本機代碼),您的 API 實現必須寫入(或讀取)8 x N 位的包。

有人已經這樣做了嗎? 顯然,答案是“是的”。 谷歌搜索“java 比特流類”或“java 比特流庫”。 (抱歉,但沒有鏈接,因為我認為比特流 API 是一個瘋狂的想法,我不想鼓勵您浪費時間與它們...)

可以通過 JBBPBitOutputStream 或 JBBPOut 使用JBBP 框架將位寫入 OutputStream

JBBPOut.BeginBin().Bit(false,false,false,true,true,true).End().toByteArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM