如何在java中的dataOutputstream中写入位

时间:2015-06-15 11:51:22

标签: 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

2 个答案:

答案 0 :(得分:1)

您不能将一位写入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是一个疯狂的想法,我不想鼓励你浪费你的时间......)

答案 1 :(得分:1)

可以使用JBBP framework将位写入OutputStream 通过JBBPBitOutputStream或JBBPOut

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