從java socket對象獲取的InputSteam的read方法其實是對linux的recv()函數的調用,OutputStream也同理。
也就是說,InputStream和OutputStream只是對底層接口的一個包裝。
recv()和send()來自於<sys/socket.h>,這是glibc的頭文件。函數原型如下:
ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);
ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);
可見,給定要傳輸的數據的起始地址以及要傳輸的數據的長度,就可以進行傳輸了。
而OutputStream的write方法,
java.io.OutputStream.write(byte[] b, int off, int len)
同樣,給定要傳輸的數據的起始地址以及要傳輸的數據的長度。