代码调用流程:
主要类及函数 : 函数所在的文件:
java层: FileInputSteam.read java\io\InputStream.java
IoBridge.read libcore\io\IoBridge.java
Libcore.os.read libcore\io\LibCore.java
public static Os os = new BlockGuardOs(new Posix()) libcore\io\LibCore.java
read libcore\io\Posix.java
readBytes
private native int readBytes(FileDescriptor fd, Object buffer, int offset, int byteCount) throws ErrnoException;
JNI层: Posix_readBytes native\libcore_io_Posix.cpp
jniGetFDFromFileDescriptor JNIHelp.cpp
C层: read libc
1. 分析
Java中常用的文件读写的两个类:
1.FileInputStream/FileOutputStream(FileReader/FileWriter)
2.RandomFileAccess
FileInputSteam和FileOutputStream继承于InputStream和OutputStream,FileReader、FileWriter继承于Reader和Writer,它们的底层实现原理其实是样的,区别在于一个前者用于字节型数据流读写,后者用于unicode文本流读写
RandomFileAccess是一个独立的文件读写类,它与InputStream、OutputStream不同之处在于它更倾向与随机文件读写,类似C语言fopen、fread、fseek、fwrite、fflush、