天天看點

JDK的OutputStream為什麼方法write(int b)的入參類型是int呢?C語言基本資料類型簡介C語言檔案操作詳解

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>);

JDK的OutputStream為什麼方法write(int b)的入參類型是int呢?C語言基本資料類型簡介C語言檔案操作詳解

2、為什麼不用char?java中byte到char需要一個強制轉換,而 int 不需要;

JDK的OutputStream為什麼方法write(int b)的入參類型是int呢?C語言基本資料類型簡介C語言檔案操作詳解

3、為什麼不用short? 這個是32位CPU4位元組對齊的問題吧,胡老師指正;

4、C語言中整型量和字元量可以通用;

是以Java和c語言檔案讀寫的通信,最佳類型就是int。

另外收錄胡老師的見解:

相關參考:

<a target="_blank" href="https://www.cnblogs.com/lxcmyf/p/6513130.html">Java語言基本資料類型</a>