A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 戴振良 黑马帝   /  2012-3-31 23:05  /  2499 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 戴振良 于 2012-3-31 23:09 编辑

  private native void writeBytes(byte b[], int off, int len) throws IOException;

  public void write(byte b[]) throws IOException {
        writeBytes(b, 0, b.length);
    }

上面这两个方法的代码是从FileInputStream类的源文件里复制过来的

在张孝详老师的视频里说,使用FileInputStream.write(byte b[])方法后,即使没有调用该类的flush()或者close()方法,bytep字节一样会写到文件去,这是因为在write方法里面调用了flush。

于是我找到源文件,想看看源代码中的write(byte b[])方法是不是真的调用了flush()方法和它是怎么把字节写到缓冲区的。我找到了write(byte b[])方法,它里面就调用了writeBytes(b, 0, b.length);这个方法,于是我找到了  private native void writeBytes(byte b[], int off, int len) throws IOException;这个,这里什么代码体都没有啊,它是怎么一回事呢?这代码有什么用啊,就抛出了个异常,还有这里的native是什么修饰符,干什么用的?

其实我最想知道的就是writeBytes(b, 0, b.length)方法里面的代码体,我想看看它里面有没有调用flush方法,希望大家先回答这个最主要的问题,谢谢!!!!!!!!{:soso_e183:} {:soso_e183:} {:soso_e183:} {:soso_e183:} {:soso_e183:}

3 个回复

倒序浏览
private native void writeBytes(byte b[], int off, int len) throws IOException;  
  这是本地方放  native修饰的  调用windows系统的东西   具体怎么实现的 就不知道了
回复 使用道具 举报
native是方法修饰符。Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在java代码中,就不需要声明了,有点类似于借口方法。Native可以和其他一些修饰符连用,但是abstract方法和Interface方法不能用native来修饰。

当在方法中调用一些不是由java语言写的代码或者在方法中用java语言直接操纵计算机硬件时要声明为native方法。

java中,通过JNI(Java Native Interface,java本地接口)来实现本地化。在java\include\jni.h目录中,由虚拟机来实现,没法知道具体细节

回复 使用道具 举报
张明星 发表于 2012-4-1 08:47
native是方法修饰符。Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实 ...

回答很详细,谢谢!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马