3. 文件编程

简介: 3. 文件编程

3.1 FileChannel

⚠️ FileChannel 工作模式

FileChannel 只能工作在阻塞模式下

获取

不能直接打开 FileChannel,必须通过 FileInputStream、FileOutputStream 或者 RandomAccessFile 来获取 FileChannel,它们都有 getChannel 方法

  • 通过 FileInputStream 获取的 channel 只能读
  • 通过 FileOutputStream 获取的 channel 只能写
  • 通过 RandomAccessFile 是否能读写根据构造 RandomAccessFile 时的读写模式决定

读取

会从 channel 读取数据填充 ByteBuffer,返回值表示读到了多少字节,-1 表示到达了文件的末尾 int readBytes = channel.read(buffer);

写入

写入的正确姿势如下, SocketChannel ByteBuffer buffer = ...; buffer.put(...); // 存入数据 buffer.flip();   // 切换读模式

while(buffer.hasRemaining()) { channel.write(buffer); }

在 while 中调用 channel.write 是因为 write 方法并不能保证一次将 buffer 中的内容全部写入 channel

关闭

channel 必须关闭,不过调用了 FileInputStream、FileOutputStream 或者 RandomAccessFile 的 close 方法会间接地调用 channel 的 close 方法

位置

获取当前位置 long pos = channel.position(); 设置当前位置 long newPos = ...; channel.position(newPos);

设置当前位置时,如果设置为文件的末尾

  • 这时读取会返回 -1
  • 这时写入,会追加内容,但要注意如果 position 超过了文件末尾,再写入时在新内容和原末尾之间会有空洞(00)


目录
打赏
0
0
0
0
0
分享
相关文章
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
Linux系统编程之文件编程常用API回顾和文件编程一般步骤
C语言基础教程(宏的使用和多文件编程)
C语言基础教程(宏的使用和多文件编程)
278 0
|
10月前
|
C语言函数及分文件编程
C语言函数及分文件编程
92 0
进程间通信——内存映射原理及详解(附有案例代码)
进程间通信——内存映射原理及详解(附有案例代码)
C++对象模型和this指针实例分析(二)
空指针访问成员函数 C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针 如果用到this指针,需要加以判断保证代码的健壮性 示例: //空指针访问成员函数 class Person { public: void ShowClassName() { cout << "我是Person类!" << endl;
99 0
C++对象模型和this指针实例分析(二)
C++对象模型和this指针实例分析
成员变量和成员函数分开存储 在C++中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 class Person { public: Person() { mA = 0; } //非静态成员变量占对象空间 int mA; //静态成员变量不占对象空间 static int mB; //函数也不占对象空间,所有函数共享一个函数实例 ——关键,原因见下讲。 void func() {
136 0
C++对象模型和this指针实例分析