java中如何在dataOutputstream中写入位
我想写2字节的数据作为一个位。我的位值是0001000000000000,这两个字节的数据我要按位排列 要求:java中如何在dataOutputstream中写入位,java,Java,我想写2字节的数据作为一个位。我的位值是0001000000000000,这两个字节的数据我要按位排列 要求: 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 您不能将一个位写入数据输出流。继承自OutputStream和InputStream的所有Java类的I/O粒度为8位字节 这
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
您不能将一个位写入
数据输出流
。继承自OutputStream
和InputStream
的所有Java类的I/O粒度为8位字节
这有几个原因:
- 效率-一次写入一位数据的成本过高
- 操作系统级API(系统调用)不支持这一点;请阅读UNIX/Linux手册页面中的“man 2读取”和“man 2写入”
- 您要写入的位置(文件、套接字、管道等)都由操作系统建模,数据粒度为8位字节。如果不提供7位,则无法向文件写入1位
- 8 x N位粒度适用于磁盘控制器、网络接口等的硬件级别。在网络通信标准中。。。下至ISO/OSI 1级
话虽如此,没有什么能阻止您设计和实现自己的JavaAPI,它允许您一次写入(或读取)1位。问题在于,当您开始与操作系统交互时(通过Java I/O类或本机代码),您的API实现必须写入(或读取)8 x N位的包
已经有人做过了吗?很显然,答案是“是的”。谷歌搜索“java比特流类”或“java比特流库”。(很抱歉,没有链接,因为我认为比特流API是一个疯狂的想法,我不想鼓励您浪费时间在这些API上…使用 通过JBBPBitOutputStream或使用JBBPOut
JBBPOut.BeginBin().Bit(false,false,false,true,true,true).End().toByteArray();
你说的“我想把事情安排得井井有条”是什么意思?你的问题目前还不清楚。请阅读这看起来像RLE压缩,但似乎有任意计数,你没有解释。是否要压缩数据,例如使用与其他数据混合的位字段?举个例子:为什么要将8个0位分成4、1和2组,而不是其他组?我想按位排列方式写入2字节的数据。你在重复你的问题。我们想知道的是:您对
位排列的理解是什么?您希望如何将它们写入文件中?作为交替包含字节数和值的单个字节?使用数据输出流,我正在写入char..short…double…int。。。我想写2个字节的数据,作为bitbyteb=0;字节c=0;b=(字节)(b |)(1)你没有在那里写一点。你在写两个字节…16位。1位!=16位…用英语。。。