这是怎么13字节长时间?
-
20-08-2019 - |
题
两个行情:
剩余的所有信息的协议采取的形式
<length prefix><message ID><payload>
.长前缀是四个字节big-endian值。消息ID是一个小数字节。有效载荷是消息的依赖。request: <len=0013><id=6><index><begin><length>
所请求的信息是固定长度,而是使用的要求的一块。该有效载荷包含以下信息:
- 指标:整数指定的基于零件的索引
- 开始:整数指定零-based byte offset内的片
- 长度:整数指定的请求的长度。
当我把一切都写它总结了5个字节。使用
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
byteStream.write( 13 );
byteStream.write( 6 );
byteStream.write( index );
byteStream.write( begin );
byteStream.write( length );
message = byteStream.toByteArray();
编辑:对不起我是那种生气的时候我写的。其bittorent协议。使用这个 规格.
解决方案
写()方法写入一个字节。
如果你向它发送一个char或int它只是条的一切上述第8位与&0xFF。
你有更多的选择与DataOutputStream(writeInt,writeShort等)。 但是它使用big endian byte order所以,你可能需要执行一整数。reverseBytes()(或短。reverseBytes())呼吁之前,通过在价值writeXYZ()方法。
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
DataOutputStream dout = new DataOutputStream(byteStream);
dout.writeInt( 0x13 ); // L:4
dout.write( 6 ); // L:5
dout.writeShort( index ); // guess, L:7
dout.writeLong( begin ); // >4GB support? L:15
dout.writeInt( length ); // clients accept below to 2^17, L:19
dout.flush(); // to be sure
message = byteStream.toByteArray();
注:该规范不状态的长度 index
, begin
和 length
.我只是想给一样的可供选择。
编辑2: 编辑的样品的基础上D.Shawley的答复和规范的发现 在这里,.
其他提示
我不知道什么你在这里...所引述的文本并没有说什么的长度 <index>
, <begin>
, 或 <length>
是。第一的报价国家,而是清楚的,这一消息由一个4-字节的长度,接着1字节的标识符,以及任意的有效载荷。
有效载荷的长度,是可能的价值指定为 <length>
或 <length>
+5取决于究竟是什么 <length>
装置。第二次报看起来像定义的任何消息认定,由1个字节的标识符的0x06。我猜想是:
- 有效载荷,字节了
<index><begin><length>
, 可能是14个字节 - 长正在显示在六使0x0013是19个小数
在任何情况下,字节流那你是产生似乎并不相匹配的信息定义 和 信息定义中缺乏清晰度。
write()写字节。5write()'s产生的5个字节。
看看 write(int b)
.
写入指定的字节到这个 输出流。一般的合同 写的是,一个字是写 输出流。字节是 写的是八低单位的 该论点b。24高位了 b被忽略。
亚类的
OutputStream
必须提供一个 执行这种方法。参数:b字节。