博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDK的OutputStream为什么方法write(int b)的入参类型是int呢?
阅读量:6438 次
发布时间:2019-06-23

本文共 864 字,大约阅读时间需要 2 分钟。

Java的OutPutStream中有一个方法:write(int b) 
 文档里是这么解释的:
 将指定的字节写入此输出流。write 的常规协定是:向输出流写入一个字节。要写入的字节是参数 b 的八个低位。b 的 24 个高位将被忽略。

 我怎么觉得这个方法有些奇怪呢。参数是一个int类型的整数,为啥不直接是一个字节呢?

今天在群里有小伙伴提到这个问题,,

就这个问题说说我的理解:

这个问题要从JVM虚拟机与底层交互的方面去分析,
所以我觉得这是Java语言和c语言类型定义导致的问题;
首先看Java中的函数定义:
private native void write(int b, boolean append) throws IOException;
注意:是 native 方法
C语言中的定义:
int fputc(int ch,FILE *fp)
我们看到两种语言中都是使用int类型,而不是其它,为什么呢?
1、Java中有byte类型,c语言中没有(C/C++中的定义:
typedef
 
unsigned 
char
 
BYTE);
Java中定义了3类8种基本数据类型:  ①数值型——byte、short、int、long、float、double  ②文本型——char  ③逻辑型——boolean
2、为什么不用char?java中byte到char需要一个强制转换,而 int 不需要;
3、为什么不用short? 这个是32位CPU4字节对齐的问题吧,胡老师指正;
4、C语言中整型量和字符量可以通用;
所以Java和c语言文件读写的通信,最佳类型就是int。
另外收录胡老师的见解:
typecast问题,高低位问题,符号问题,32位对齐问题你还需要知道为什么用32bit不是64bit的bigint,因为java允许64bit非原子操作32位对齐是编译原理,因为主板总线是32位传输数据,所以所有低于32位的数据在传输时都要按照32位传输,因此内存中也是保存32位,地址都是以4为单位的
相关参考:

你可能感兴趣的文章
asp.net core mvc 中间件之WebpackDevMiddleware
查看>>
Word2Vec之Skip-Gram与CBOW模型原理
查看>>
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 21 章 数据库角色_21.3. 角色成员关系...
查看>>
Android冷启动白屏问题
查看>>
Android开发之Activity转场动画
查看>>
“阿里通信云对讲 从此沟通无难事”渠道分销合作伙伴大会盛大召开
查看>>
OpenSearch在线干预服务
查看>>
Java 8 中的 Streams API 详解
查看>>
Redis 复制(学习笔记六)
查看>>
堆电池、增续航是缓解电动车“里程焦虑”的灵丹妙药吗?
查看>>
嘿!基于双11的脉冲计算核心能力现已上线!
查看>>
javascript:数组总结(一)
查看>>
[Github] github常见问题汇总
查看>>
设计模式(三) 单例模式
查看>>
开发笔记2 | Java 代码规约第1条
查看>>
css基础小知识笔记
查看>>
MySQL 数据库规范--开发篇
查看>>
算法系列15天速成——第十四天 图【上】
查看>>
Confluence 6 链接到其他应用
查看>>
重新学习Mysql数据库8:MySQL的事务隔离级别实战
查看>>