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++中的定義:<code>typedef</code> <code>unsigned </code><code>char</code> <code>BYTE</code>);

2、為什麼不用char?java中byte到char需要一個強制轉換,而 int 不需要;
3、為什麼不用short? 這個是32位CPU4位元組對齊的問題吧,胡老師指正;
4、C語言中整型量和字元量可以通用;
是以Java和c語言檔案讀寫的通信,最佳類型就是int。
另外收錄胡老師的見解:
相關參考:
<a target="_blank" href="https://www.cnblogs.com/lxcmyf/p/6513130.html">Java語言基本資料類型</a>