java 里面的流输出的时候是big endian还是little endian?

发布于 2021-11-27 06:56:15 字数 770 浏览 710 评论 14

我是javaer.

java里面的OutputStream和DataOutputStream,我测试了一下,看了他们输出了整数的文件,用16进制查看后,发现是big endian,如short类型的122,输出为00 7a,又查了资料说,java里面默认就是Big endian,但是为什么tcp连接的时候,项目报文里面的有些整数字段还是要显式地转换才能作为网络字节序呢?java不是默认big endian,本身就是字节序了!

背景是,我现在公司做的项目,都是处理一些接口,看了接口文档中的说明,发现明确规定有些字段,例如报文长度,要求用网络字节序.

然后,就用了类似DataOutputStream中writeByte,writeShort,writeInt,writeLong之类的方法,来转换整数,那么现在的问题是,java中的流,各式各样的流,是big endian还是little endian呢?

SocketOutputStream,就是从socket中用getOutputStream获得流,这是个默认权限的类,只能同一个包才能访问,我们平常用的时候都是用它的父类OutputStream来引用它,这个流是不是就是little endian?如果不是,那么为什么用它发送报文的时候,需要显式的把某些整数转换成网络字节序?

大神们,各抒己见,来给新人讲解一下吧?我也是奇怪,我测试了,inputStream和DataOutputStream输出的文件,都是big endian,为什么输出流的SocketOutputStream,却要显式地转换整数位网络字节序?

alphabet927

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(14

剑心龙吟 2021-11-30 20:07:29

那个用父类的引用会出问题是LZ你想多了,大端和小端终究还是由这个流对象自己决定的,并不会随着你的引用类型变化

千纸鹤带着心事 2021-11-30 20:07:28

引用来自“ice_stream”的评论

java是默认是Big endian。C是little endian.

往往报文协议的设计者都是c背景,所以报文会要求little endian,为了保证“远端”程序能正常工作,你需要将发出的字节流转换为协议要求的字节序,接收时也要转回来.

草莓味的萝莉 2021-11-30 20:07:25

补充:这样描述可能并不一定正确,只是为了好理解。

清风夜微凉 2021-11-30 20:07:25

大端

反目相谮 2021-11-30 20:07:24

简单理解:int是Java中的简单类型对象(包含对象描述和对象所对应的数据),而byte[]就已经是二进制数据了。

睫毛上残留的泪 2021-11-30 20:07:23

不知道也很正常.

谁的新欢旧爱 2021-11-30 20:07:11

你将那些 英文单词,换成 Unicode , ascii, iso-8859-1 。。等等,应该就有很多人回复了。。

big endian ... 表示不知是什么东西。。

辞别 2021-11-30 20:07:00

那是你们公司的风格. 一般情况下我会使用byteBuffer,指定order.到最后再生成byte[],os.write(byte[])

画骨成沙 2021-11-30 20:06:15

引用来自“ice_stream”的评论

java是默认是Big endian。C是little endian.

往往报文协议的设计者都是c背景,所以报文会要求little endian,为了保证“远端”程序能正常工作,你需要将发出的字节流转换为协议要求的字节序,接收时也要转回来.

清风夜微凉 2021-11-30 19:54:35

为什么没有人回答,我用cheat engine,不会看内存!

恋你朝朝暮暮 2021-11-30 19:53:54

召唤神龙,大侠,奥特曼,数码宝贝,神灯.

吃颗糖壮壮胆 2021-11-30 19:40:59

高大上

羁拥 2021-11-30 19:02:45

java里面的确都是大端.

居里长安 2021-11-30 16:58:47

java是默认是Big endian。C是little endian.

往往报文协议的设计者都是c背景,所以报文会要求little endian,为了保证“远端”程序能正常工作,你需要将发出的字节流转换为协议要求的字节序,接收时也要转回来.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文