RandomAccessFile 随机读写流

2024-02-22 23:48

本文主要是介绍RandomAccessFile 随机读写流,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.随机读写流的介绍

  • RandomAccessFile-随机读写流,不属于任何流对象,直接继承了Object类,既可读又可写可随机访问读和写
  • 以前学的流对象 读取从文件开头读,写末尾追加或开头覆盖
  • RandomAccessFile在文件任意位置上开始读和写,隐含了大型字节数组,文件都是由字节组成,文件二进制都放在自己的数组中
  • 有一种游标或索引到隐含数组中,称为文件指针
  • 输入操作从文件指针开始读取字节,并使文件指针超过读取的字节数。 如果在读/写模式下创建随机访问文件,则输出操作也可用;
  • 输出操作从文件指针开始写入字节,并使文件指针超过写入的字节。 写入隐含数组当前末尾的输出操作会导致数组被扩展。 文件指针可以通过读取-getFilePointer方法和设置-seek方法。
  • seek(long l) 设置开始的指针
  • rw.skipBytes() 跳过字节数,调用了seek方法
  • 构造器:
  • 1)RandomAccessFile(File file, String mode)
  • 创建一个随机访问文件流读,随意写来,由 File参数指定的文件。
  • 2)RandomAccessFile(String name, String mode)
  • 创建一个随机访问文件流,并可选择地写入到具有指定名称的文件中。
  • 模式:r 只读 如果写会抛异常
  • 模式:rw 可读可写
  • 常应用于多线程下载大文件

二.代码案例

package InputOutput;import java.io.IOException;
import java.io.RandomAccessFile;/*** @author sunyong* @date 2020/07/26* @description 随机读写流*/
public class RandomDemo {/** 随机读写流,写数据* 有规律数据: 张三 65 李四 66 王五 67* 王五写在李四前面 李四字节数 9-16 王五在9字节上* seek 移动文件指针,将王五移动到9字节上 seek(8)* 李四应该在17字节上 seek(16)*/public static void write() throws IOException {//创建随机读写流对象 rw模式RandomAccessFile rw = new RandomAccessFile("random.txt", "rw");rw.write("张三".getBytes());rw.write(65);//设置李四指针为16+1rw.seek(16);rw.write("李四".getBytes());rw.write(66);//移动文件指针设置王五指针为8+1rw.seek(8);rw.write("王五".getBytes());rw.write(67);rw.close();}/*** 随机读写流 读文件* 指定字节数进行读取* 如果读取的是有规律的文件,使用循环读取* 停下循环-->捕获EOF异常*/public static void read() throws IOException {//创建随机读写流对象 rw模式RandomAccessFile rw = new RandomAccessFile("random.txt", "rw");while(true) {try {//名字是四个字节byte[] bytes = new byte[4];int len = rw.read(bytes);System.out.println(new String(bytes));//年龄是整形int age = rw.readInt();System.out.println(age);}catch (Exception e){break;}rw.close();}}public static void main(String[] args) throws IOException {read();}
}

这篇关于RandomAccessFile 随机读写流的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736884

相关文章

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

关于使用cspreadsheet读写EXCEL表格数据的问题

前几天项目有读写EXCEL表格的需求,我就找了大概有几种,大致分为:COM方法、ODBC方法、OLE方法、纯底层格式分析方法。由于COM方法要求必须安装有OFFICE的EXCEL组件,纯底层格式分析方法又很多功能需要自行去完善,所有最终选择了数据库的方法,用数据库的方法去存取xls格式的数据。网上有一个高手写的CSpreedSheet,看了一下提供的接口,感觉挺好用的。在使用的过程中发现几个

AI学习指南深度学习篇-带动量的随机梯度下降法的基本原理

AI学习指南深度学习篇——带动量的随机梯度下降法的基本原理 引言 在深度学习中,优化算法被广泛应用于训练神经网络模型。随机梯度下降法(SGD)是最常用的优化算法之一,但单独使用SGD在收敛速度和稳定性方面存在一些问题。为了应对这些挑战,动量法应运而生。本文将详细介绍动量法的原理,包括动量的概念、指数加权移动平均、参数更新等内容,最后通过实际示例展示动量如何帮助SGD在参数更新过程中平稳地前进。

linux 内核提权总结(demo+exp分析) -- 任意读写(四)

hijack_modprobe_path篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     原理同hijack_prctl, 当用户执行错误格式的elf文件时内核调用call_usermod

linux 内核提权总结(demo+exp分析) -- 任意读写(三)

hijack_prctl篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   prctl函数: 用户态函数,可用于定制进程参数,非常适合和内核进行交互 用户态执行prctl函数后触发prctl系统

linux 内核提权总结(demo+exp分析) -- 任意读写(二)

hijack_vdso篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm     vdso: 内核实现的一个动态库,存在于内核,然后映射到用户态空间,可由用户态直接调用 内核中的vdso如果被修改

linux 内核提权总结(demo+exp分析) -- 任意读写(一)

cred篇 本文转自网络文章,内容均为非盈利,版权归原作者所有。 转载此文章仅为个人收藏,分享知识,如有侵权,马上删除。 原文作者:jmpcall 专栏地址:https://zhuanlan.kanxue.com/user-815036.htm   每个线程在内核中都对应一个线程结构块thread_infothread_info中存在task_struct类型结构体 struct t

AI学习指南深度学习篇-带动量的随机梯度下降法简介

AI学习指南深度学习篇 - 带动量的随机梯度下降法简介 引言 在深度学习的广阔领域中,优化算法扮演着至关重要的角色。它们不仅决定了模型训练的效率,还直接影响到模型的最终表现之一。随着神经网络模型的不断深化和复杂化,传统的优化算法在许多领域逐渐暴露出其不足之处。带动量的随机梯度下降法(Momentum SGD)应运而生,并被广泛应用于各类深度学习模型中。 在本篇文章中,我们将深入探讨带动量的随