从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)
同样,给定要传输的数据的起始地址以及要传输的数据的长度。