繁体   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