快速业务通道

java源码FileInputStream - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
) { int nread, datalen; char stackBuf[BUF_SIZE]; char *buf = 0; FD fd; if (IS_NULL(bytes)) { JNU_ThrowNullPointerException(env, 0); return -1; } datalen = (*env)->GetArrayLength(env, bytes); if ((off < 0) || (off > datalen) || (len < 0) || ((off + len) > datalen) || ((off + len) < 0)) { JNU_ThrowByName(env, "java/lang/IndexOutOfBoundsException", 0); return -1; } if (len == 0) { return 0; } else if (len > BUF_SIZE) { buf = malloc(len); if (buf == 0) { JNU_ThrowOutOfMemoryError(env, 0); return 0; } } else { buf = stackBuf; } fd = GET_FD(this, fid); nread = IO_Read(fd, buf, len); if (nread > 0) { (*env)->SetByteArrayRegion(env, bytes, off, nread, (jbyte *)buf); } else if (nread == JVM_IO_ERR) { JNU_ThrowIOExceptionWithLastError(env, "Read error"); } else if (nread == JVM_IO_INTR) { /* EOF */ JNU_ThrowByName(env, "java/io/InterruptedIOException", 0); } else { /* EOF */ nread = -1; } if (buf != stackBuf) { free(buf); } return nread; }

java源码FileInputStream(5)

时间:2010-12-14

注意IO_Read在io_util_md.h做了手脚的,

#define IO_Read JVM_Read

其实就是JVM_Read,JVM_Read在hotspot源码中定义的

//%note jvm_r6 return (jint)hpi::read(fd, buf, nbytes); hpi定义了大量的函数 // HPI_FileInterface static inline char* native_path(char *path); static inline int file_type(const char *path); static inline int open(const char *name, int mode, int perm); static inline int close(int fd); static inline jlong lseek(int fd, jlong off, int whence); static inline int ftruncate(int fd, jlong length); static inline int fsync(int fd); static inline int available(int fd, jlong *bytes); static inline size_t read(int fd, void *buf, unsigned int nBytes); static inline size_t write(int fd, const void *buf, unsigned int nBytes); static inline int fsize(int fd, jlong *size);

这就是和平台相关的代码了。window下通过HPIDECL宏转换的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号