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为单位的

相关参考:

Java语言基本数据类型

C语言基本数据类型简介

C语言文件操作详解

JDK的OutputStream为什么方法write(int b)的入参类型是int呢?相关推荐

  1. 字节码编程,Byte-buddy篇二《监控方法执行耗时动态获取出入参类型和值》

    作者:小傅哥 博客:https://bugstack.cn - 汇总系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 案例是剥去外衣包装展示出核心功能的最佳学习方式! 就像是我们研 ...

  2. IntelliJ IDEA设置方法注释模板并解决入参和返回值为空问题

    ## 简介 网上讲解设置方法注释模板的文章很多,尝试了很多方法后,发现在方法体外生成的模板入参值和返回值都是null,而放到方法体内的入参值和返回值就可以自动生成.苦试N次,终于发现诀窍.Idea的这 ...

  3. aop 获取方法入参出参_ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称及入参和出参结果并记录方法耗时...

    作者:小傅哥 博客:bugstack.cn ❝ 沉淀.分享.成长,让自己和他人都能有所收获! ❞ 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了 ...

  4. 根据WebService地址展示方法列表、入参和返回值(解析wsdl)

    项目源码:https://gitee.com/xuchuruo/parsing_wsdl(有些jar包Maven上无法下载) ------------------------------------- ...

  5. ASM字节码编程 | JavaAgent+ASM字节码插桩采集方法名称以及入参和出参结果并记录方法耗时

    作者:小傅哥 博客:bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在我们实际的业务开发到上线的过程中,中间都会经过测试.那么怎么来保证测试质量呢?比如:提交了多少代码 ...

  6. 运用aop做日志,实现请求方法的入参、返回结果日志统一打印,避免日志打印格式杂乱,同时减少重复代码

    文章目录 一.自定义注解 二.切面类 三.应用 一.自定义注解 自定义切面注解@PrintlnLog 用来输出日志,注解权限 @Target({ElementType.METHOD}) 限制只在方法上 ...

  7. AOP注解@Before、@AfterReturning拦截单个方法的入参和出参,纯注解方式(附源码下载),解决单个方法不生效问题(一)

    AOP注解@Before.@AfterReturning拦截单个方法的入参和出参,纯注解方式(附源码下载),解决单个方法不生效问题(一) 问题背景 AOP注解@Before.@AfterReturni ...

  8. 在JDK 6和JDK 7的substring()方法的区别?

    原文链接:https://www.programcreek.com/2013/09/the-substring-method-in-jdk-6-and-jdk-7/ 在JDK 6和JDK 7中subs ...

  9. Spring的aspect无法拦截有注解的jdk代理的接口方法的原因

    Spring的aspect无法拦截有注解的jdk代理的接口方法的原因 我github博客地址 背景 项目A中需要多数据源的实现,比如UserDao.getAllUserList() 需要从readon ...

最新文章

  1. 【哲学百科】文艺复兴及唯理主义时期(公元1500~公元1750)
  2. 窥见人工智能四十年 2019 CCF-GAIR全球人工智能与机器人峰会今日开幕
  3. 【Android 逆向】修改 Android 的 apk 安装包内的文件并重新打包 ( apktool_2.6.0.jar 下载和使用 | zipalign 文件对齐 | apksigner 签名 )
  4. 预训练模型:BERT深度解析《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
  5. java系列7:构造方法
  6. 计算机算法设计与分析 工作安排问题
  7. 工厂模式 java 电脑配件_1.Java设计模式-工厂模式
  8. 使用paramiko在eNSP的交换机中批量创建VLAN
  9. android脚本,安卓好用的脚本程序—Gscript
  10. catia切割红色框框_如何在CATIA中对零件的实体进行切割,详细始末
  11. 机器学习笔记(八):强化学习
  12. DEV 报表设计分组
  13. 天津大学计算机软件技术基础试题答案,天津大学网络学院计算机软件技术基础-1试题b卷.doc...
  14. 深度学习使用sketch-code 草图、手稿自动生成HTML前端页面
  15. 图片镜像翻转 Java
  16. android OTG (USB读写,U盘读写)最全使用相关总结
  17. 培养气质的98个好习惯
  18. 拼多多店铺被投诉出现降权怎么办?【淘宝erp、打单发货接口】
  19. PW2312A输入55V,输出0.6A降压IC
  20. 静态资源优化:图片优化

热门文章

  1. vue.js初识(一)
  2. 安卓开源项目周报1220
  3. AsyncTask的理解
  4. Babelfish (STL)
  5. 第十二节 VMware View 6.0 菜鸟入门 部署和安装2008 R2 RDS服务
  6. chrome下input[type=text]的placeholder不垂直居中的问题解决
  7. Install ruby on rails in Ubuntu 12.04
  8. 链内容百度新算法怎样判断高质量外链和原创内容
  9. Oracle 根据一张发票的供应商,取供应商所有符合条件的发票的总额
  10. 怎么取消html的原始属性,回归原始,尽量使用XHTML标签默认属性