日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/4/13 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK的OutputStream为什么方法write(int b)的入参类型是int呢? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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呢?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。