RandomAccessFile(转)

【BLE系列-第六篇】GATT解析:属性、特征、描述符的逻辑关系 本文系统介绍了BLE协议中的ATT和GATT机制。ATT以"属性"为基本数据单元,包含UUID、Handle、权限和Value四个要素。GATT则在ATT基础上构建了服务、特征和描述符的层次结构:服务(UUID:0x2800/0x2801)通过声明属性标识,特征声明(UUID:0x2803)指向特征值(UUID:0x2Axx或自定义),描述符(UUID:0x2900~0x290F)提供附加信息。GATT复用ATT发现机制,通过定义特定UUID语义实现服务发现和特征管理。这种设计使BLE设 阅读详情
 
2011-06-20

RandomAccessFile(转)

  • 博客分类:
  • j2se
F#

RandomAccessFile是一个很有用的类,可以将字节流写入到磁盘文件中,对应的也可以从磁盘文件中读取出字节流,在API中关于RandomAccessFile的描述如下:

此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组的光标或索引,称为文件指针 ;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出操作导致该数组扩展。该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。

 

通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException (是一种 IOException )。如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException ,而不是 EOFException 。需要特别指出的是,如果流已被关闭,则可能抛出 IOException 。

以下是两个RandomAccessFile的写入和读取的简单例子:

1、  将字节流写入到磁盘中

Java代码 复制代码   收藏代码
  1. private static void testCreateFile(){   
  2.   
  3. String directory = “D:/program/test”;   
  4.   
  5. String name = “t.gen”;   
  6.   
  7. File f = new File(directory, name);   
  8.   
  9. RandomAccessFile file = null;   
  10.   
  11. try {   
  12.   
  13. file = new RandomAccessFile(f, “rw”);   
  14.   
  15. byte[] b = {5,10,15,20};   
  16.   
  17. try {   
  18.   
  19. //如果没有这行,文件也会生成,只是文件为空   
  20.   
  21. file.write(b,0,4);   
  22.   
  23. } catch (IOException e) {   
  24.   
  25. e.printStackTrace();   
  26.   
  27. }   
  28.   
  29. } catch (FileNotFoundException e) {   
  30.   
  31. e.printStackTrace();   
  32.   
  33. }finally{   
  34.   
  35. if (null!=file){   
  36.   
  37. try {   
  38.   
  39. file.close();   
  40.   
  41. } catch (IOException e) {   
  42.   
  43. e.printStackTrace();   
  44.   
  45. }   
  46.   
  47. }   
  48.   
  49. }   
  50.   
  51. }  
private static void testCreateFile(){

String directory = “D:/program/test”;

String name = “t.gen”;

File f = new File(directory, name);

RandomAccessFile file = null;

try {

file = new RandomAccessFile(f, “rw”);

byte[] b = {5,10,15,20};

try {

//如果没有这行,文件也会生成,只是文件为空

file.write(b,0,4);

} catch (IOException e) {

e.printStackTrace();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

}finally{

if (null!=file){

try {

file.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}
 
Java代码 复制代码   收藏代码
  1. 2、  从磁盘文件中读取字节流   
  2.   
  3. private static void testReadFile(){   
  4.   
  5. String directory = “D:/program/luceneDemo3.0/test”;   
  6.   
  7. String name = “t.gen”;   
  8.   
  9. File f = new File(directory, name);   
  10.   
  11. RandomAccessFile file = null;   
  12.   
  13. try {   
  14.   
  15. file = new RandomAccessFile(f, “rw”);   
  16.   
  17. byte[] b = new byte[4];   
  18.   
  19. try {   
  20.   
  21. long len = file.length();   
  22.   
  23. file.read(b);   
  24.   
  25. //设置要读取的字节位置   
  26.   
  27. file.seek(1);   
  28.   
  29. System.out.println(file.readByte()+”>>FilePointer>>”+file.getFilePointer());   
  30.   
  31. for (int i=0;i<b.length;i++){   
  32.   
  33. System.out.println(“>>>”+b[i]);   
  34.   
  35. }   
  36.   
  37. } catch (IOException e) {   
  38.   
  39. e.printStackTrace();   
  40.   
  41. }   
  42.   
  43. } catch (FileNotFoundException e) {   
  44.   
  45. e.printStackTrace();   
  46.   
  47. }finally{   
  48.   
  49. if (null!=file){   
  50.   
  51. try {   
  52.   
  53. file.close();   
  54.   
  55. } catch (IOException e) {   
  56.   
  57. e.printStackTrace();   
  58.   
  59. }   
  60.   
  61. }   
  62.   
  63. }   
  64.   
  65. }  
2、  从磁盘文件中读取字节流

private static void testReadFile(){

String directory = “D:/program/luceneDemo3.0/test”;

String name = “t.gen”;

File f = new File(directory, name);

RandomAccessFile file = null;

try {

file = new RandomAccessFile(f, “rw”);

byte[] b = new byte[4];

try {

long len = file.length();

file.read(b);

//设置要读取的字节位置

file.seek(1);

System.out.println(file.readByte()+”>>FilePointer>>”+file.getFilePointer());

for (int i=0;i<b.length;i++){

System.out.println(“>>>”+b[i]);

}

} catch (IOException e) {

e.printStackTrace();

}

} catch (FileNotFoundException e) {

e.printStackTrace();

}finally{

if (null!=file){

try {

file.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}
 

说明 :

1、  这个类依我看来,用来处理字节流(byte)是很好的,如果用来处理字符(串)或其他数据类型,比如int、long,我试了感觉效果并不好,尤其是处理中文字符串的时候,那简直就是一个灾难,你会又碰上纠缠不清的乱码!

2、 seek(long pos)方法

是在读取的时候用来设置读取到哪一个字节的,比如在例子中有5,10,15,20字节,在byte数组中分别对应0、1、2、3位置,同样在文件 file = new RandomAccessFile(f, “rw”);中,也对应着0、1、2、3位置,所以如果设置file.seek(1);就表示通过file.readByte()读取的时候,读取的是第 1位置的数据,也就是10了。

3、  getFilePointer()方法

在通过上面说的seek (long pos)设置后,getFilePointer()得到的就是当前文件中的字节位置,也就是所说的偏移量了。比如在这个例子中,getFilePointer()的值就是1.

4、文件模式

“r” 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。

“rw” 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。

“rws” 打开以便读取和写入,对于 “rw”,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。

“rwd”   打开以便读取和写入,对于 “rw”,还要求对文件内容的每个更新都同步写入到底层存储设备。

附录 :

voidclose ()
关闭此随机访问文件流并释放与该流关联的所有系统资源。
FileChannelgetChannel ()
返回与此文件关联的唯一 FileChannel 对象。
FileDescriptorgetFD ()
返回与此流关联的不透明文件描述符对象。
longgetFilePointer ()
返回此文件中的当前偏移量。
longlength ()
返回此文件的长度。
intread ()
从此文件中读取一个数据字节。
intread (byte[] b)
将最多 b.length 个数据字节从此文件读入 byte 数组。
intread (byte[] b, int off, int len)
将最多 len 个数据字节从此文件读入 byte 数组。
booleanreadBoolean ()
从此文件读取一个 boolean。
bytereadByte ()
从此文件读取一个有符号的八位值。
charreadChar ()
从此文件读取一个字符。
doublereadDouble ()
从此文件读取一个 double。
floatreadFloat ()
从此文件读取一个 float。
voidreadFully (byte[] b)
将 b.length 个字节从此文件读入 byte 数组,并从当前文件指针开始。
voidreadFully (byte[] b, int off, int len)
将正好 len 个字节从此文件读入 byte 数组,并从当前文件指针开始。
intreadInt ()
从此文件读取一个有符号的 32 位整数。
StringreadLine ()
从此文件读取文本的下一行。
longreadLong ()
从此文件读取一个有符号的 64 位整数。
shortreadShort ()
从此文件读取一个有符号的 16 位数。
intreadUnsignedByte ()
从此文件读取一个无符号的八位数。
intreadUnsignedShort ()
从此文件读取一个无符号的 16 位数。
StringreadUTF ()
从此文件读取一个字符串。
voidseek (long pos)
设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。
voidsetLength (long newLength)
设置此文件的长度。
intskipBytes (int n)
尝试跳过输入的 n 个字节以丢弃跳过的字节。
voidwrite (byte[] b)
将 b.length 个字节从指定 byte 数组写入到此文件,并从当前文件指针开始。
voidwrite (byte[] b, int off, int len)
将 len 个字节从指定 byte 数组写入到此文件,并从偏移量 off 处开始。
voidwrite (int b)
向此文件写入指定的字节。
voidwriteBoolean (boolean v)
按单字节值将 boolean 写入该文件。
voidwriteByte (int v)
按单字节值将 byte 写入该文件。
voidwriteBytes (String s)
按字节序列将该字符串写入该文件。
voidwriteChar (int v)
按双字节值将 char 写入该文件,先写高字节。
voidwriteChars (String s)
按字符序列将一个字符串写入该文件。
voidwriteDouble (double v)
使用 Double 类中的 doubleToLongBits 方法将双精度参数转换为一个 long,然后按八字节数量将该 long 值写入该文件,先定高字节。
voidwriteFloat (float v)
使用 Float 类中的 floatToIntBits 方法将浮点参数转换为一个 int,然后按四字节数量将该 int 值写入该文件,先写高字节。
voidwriteInt (int v)
按四个字节将 int 写入该文件,先写高字节。
voidwriteLong (long v)
按八个字节将 long 写入该文件,先写高字节。
voidwriteShort (int v)
按两个字节将 short 写入该文件,先写高字节。
voidwriteUTF (String str)
使用 modified UTF-8 编码以与机器无关的方式将一个字符串写入该文件。
告别手册!S32K3XX的eMIOS实战:从GPT定时到PWM输出,一个通道搞定电机控制 本文深入探讨了NXP S32K3XX系列MCU的eMIOS模块在电机控制中的高效应用。通过单通道实现PWM生成、输入捕获和定时中断三大功能,展示了如何简化BLDC电机控制硬件设计。文章结合RTD库与寄存器级编程,提供动态模式切换和性能优化方案,显著降低CPU负载。 阅读详情

相关推荐

RDMA性能调优实战:如何用ib_*命令榨干你的Mellanox网卡带宽?

本文深入探讨了如何利用ib_*命令工具集对RDMA网络进行深度性能调优,以充分释放Mellanox网卡的带宽潜力。文章从理解Send/Write/Read三种核心通信原语的差异入手,逐步指导读者通过调整消息大小、队列深度、内联数据等关键参数,并结合系统级的NUMA绑定、中断亲和性等优化策略,实现从基准测试到逼近硬件极限的性能提升。

weixin_29306011的博客 88

使用RandomAccessFile这个类,从文件中读取数据,却读取不出来

请看下面这段代码,相关的问题我应经注释了出来: package timemanager; import java.io.EOFException; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; impo

Mr_Pang的专栏 3182

MAX30102心率血样模块在STM32F103芯片的程序说明

我希望你已经安装好了Keil MDK5这个软件,也安装了M3内核,可以编译一些STM32F103的一些项目下载程序后步骤: 1-按照下图找到IIC.uvprojx并打开(途中唯一绿色那个图标) 2-编译一次 3-确保0错误,0警告,下图所示 4-点击目标选项,然后找到STM32F103C8,再点debug–CMSIS****(我实际用的JTAG,用不了,选择这个CMSIS****即可)下图所示 5-下图所示,看看你的串口找到了没,找到了就点左下角的OK 6-按图上传到开发板 7-MAX30102接线方法

weixin_51357422的博客 5801

文件到Java中的byte []

如何将java.io.File转换为byte[] ?

asdfgh0077的博客 497

完整版:ultralytics下运行yoloworld并训练

本文介绍了Ultralytics YOLO环境的快速配置与使用流程:1) 通过conda创建Python 3.9环境并安装依赖包;2) 配置中科大镜像源加速安装PyTorch和Ultralytics;3) 准备YOLO格式数据集并修改data.yaml配置文件;4) 提供模型预测、训练和验证的常用指令,包括predict/train/val等命令参数设置。文章还包含CLIP模型下载、权重文件获取以及本地安装等注意事项,完整覆盖了从环境搭建到模型部署的全过程。

weixin_50209871的博客 1346

基于Coze平台从零构建AI智能体:以测试用例生成为例的实战指南

在人工智能技术快速发展的今天,大语言模型(LLM)和提示词工程(Prompt Engineering)已成为构建智能应用的核心技术。其原理在于通过自然语言指令引导模型完成特定任务,其技术价值在于极大地降低了AI应用开发的门槛,使非专业开发者也能快速实现想法。这一技术广泛应用于自动化办公、智能客服、内容生成等场景。本文聚焦于字节跳动旗下的Coze平台,该平台通过可视化工作流编排和预置技能,将上述技术封装为易用的工具。文章以“根据产品需求文档(PRD)自动生成测试用例”这一具体场景为例,详细拆解了从需求分析、工

weixin_30617695的博客 339

Java缓冲流、访问字符串

一、缓冲流 在读写数据时,让数据在缓冲区能减少系统实际对原始数据来源的存取次数,因为一次能做多个数据单位的操作。相较而言,对于直接从文件读取数据或将数据写入文件,比起缓冲区的读写要慢多了。所以使用缓冲区的流,一般都会比没有缓冲区的流效率更高。拥有缓冲区的流被称为缓冲流,包括BufferedInputStream、BufferedOutputStream类和BufferedReader、Buffer...

weixin_42530700的博客 532

Far planner代码系列(2)

graph_decoder系列(2) 承接上文 我们接着来看decoder_node.cpp的代码部分 void GraphDecoder::Init() { /* initialize subscriber and publisher */ //graph_sub_ 订阅节点/robot_vgraph 其类型是visibility_graph_msg/Graph的消息 graph_sub_ = nh.subscribe("/robot_vgrap...

博客 1534

随机读取文件--RandomAccessFile的应用实例

RandomAccessFile是用来访问那些保存数据记录的文件的,这样你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。RandomAccessFile竟然会是不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutput

西召 1072

1. SAP Fiori Elements 开发环境的搭建和开发准备工作

本文介绍了本地使用 Visual Studio Code 进行 Fiori Elements 开发所需要安装的这个扩展包里6个能够提高 Fiori Elements 应用开发效率的扩展。在本教程后续步骤里我们会通过实际的例子介绍这些 Visual Studio Code 扩展的详细用法。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3455

delphi fmx android 自动更新(一)

所以,如果是http 则,manifest.xml application 下,https无需添加。增加android:usesCleartextTraffic="true",不然无法使用http下载东西。1,REQUEST_INSTALL_PACKAGES 权限。4,WRITE_EXTERNAL_STORAGE 权限。3,READ_EXTERNAL_STORAGE 权限。一般是从http下载安装包 apk。2,INTERNET 权限。sFile为apk包路径。

全粘工程师 550

RandomAccessFile的用法【转】

现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下“Lucene是一款非常优秀的全文检索库”。可能大多数朋友会觉得这个需求很easy,说实话,确实easy,然后XXX君开始实现了,直接使用Java中的流读取了txt文本里原来所有的数据转成字符串后,然后拼接了“Lucene是一款非常优秀的全文检索库”,又写回文本里了,至此,大功告成。后来需求改了,向5G数据的txt文本里追...

weixin_30332705的博客 81

计算机视觉安防监控升级:人脸识别与行为异常检测

计算机视觉安防监控升级:人脸识别与行为异常检测 ,人工智能,计算机视觉,大模型,AI,本文将深入探讨人脸识别与行为异常检测技术在安防监控中的应用,包括技术原理、算法实现、应用场景以及面临的挑战与解决方案。通过实际案例和代码示例,帮助读者更好地理解和掌握这些技术,为推动安防监控系统的智能化升级提供参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 23万+

(转)关于RandomAccessFile

今天一个朋友问了我一个javase的知识,是关于I/O的操作,他要在文件的末尾追加一些内容,在这当中遇到了一些问题。 朋友用的是RandomAccessFile来做写入,这个类有两个构造方法 RandomAccessFile(File file, String mode)            创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数

gxj1680的专栏 453

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

[转]RandomAccessFile

RandomAccessFile利用file pointer(文件指针),可以从给定的位置开始读取所需的数据。如下代码: private static String importFile(String filePath, Long pos, int size) { StringBuffer strBuff = new StringBuffer(); ...

weixin_38168484的博客 80

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【转】RandomAccessFile类

转自:http://zhidao.baidu.com/question/322007540.html?fr=qrl&amp;cid=870&amp;index=1&amp;fr2=query   http://blog.sina.com.cn/s/blog_3ec48433010001en.html   RandomAccessFile类 RandomAccessFile类:是比较不寻常...

Sun 122

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【转】Java I/O-RandomAccessFile

转载出处:https://www.cnblogs.com/dongguacai/p/5699444.html 一、简述 这个是JDK上的截图,我们可以看到它的父类是Object,没有继承字节流、字符流家族中任何一个类。并且它实现了DataInput、DataOutput这两个接口,也就意味着这个类既可以读也可以写。 二、存在的意义 1、是JAVA I/O流体系中功能最丰富的文件内容访问...

魂-淡 480

Java RandomAccessFile用法 【转】

RandomAccessFile源地址:http://blog.youkuaiyun.com/akon_vm/article/details/7429245 RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。RandomAccessFile不属于InputSt...

weixin_30906671的博客 86

RandomAccessFile类使用详解(转)

1.RandomAccessFile特点 RandomAccessFile是java Io体系中功能最丰富的文件内容访问类。即可以读取文件内容,也可以向文件中写入内容。但是和其他输入/输入流不同的是,程序可以直接跳到文件的任意位置来读写数据。   因为RandomAccessFile可以自由访问文件的任意位置,所以如果我们希望只访问文件的部分内容,那就可以使用RandomAccessFile类。   与OutputStearm,Writer等输出流不同的是,RandomAccessFile类允许自由定位文件

weixin_46875212的博客 1754

Java RandomAccessFile用法(转)

andomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。 RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和 DataOutput接口之外(

god2030的博客 494

(转)RandomAccessFile类使用详解

1.RandomAccessFile特点   RandomAccessFile是java Io体系中功能最丰富的文件内容访问类。即可以读取文件内容,也可以向文件中写入内容。但是和其他输入/输入流不同的是,程序可以直接跳到文件的任意位置来读写数据。  因为RandomAccessFile可以自由访问文件的任意位置,所以如果我们希望只访问文件的部分内容,那就可以使用RandomAccessFile...

weixin_30480075的博客 133

Java IO的RandomAccessFile的使用(转)

现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下“Lucene是一款非常优秀的全文检索库”。可能大多数朋友会觉得这个需求很easy,说实话,确实easy,然后XXX君开始实现了,直接使用Java中的流读取了txt文本里原来所有的数据转成字符串后,然后拼接了“Lucene是一款非常优秀的全文检索库”,又写回文本里了,至此,大...

weixin_33842328的博客 83

(转) Java RandomAccessFile与MappedByteBuffer

RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。 RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接口之外(...

weixin_34097242的博客 104

Java RandomAccessFile用法 (转的,写得非常很好!!)

RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位置必须是可知的。但是该类仅限于操作文件。 RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接

a1192529545的专栏 851

RandomAccessFile实时读取大文件(转)

    最近有一个银行数据漂白系统,要求操作人员在页面调用远端Linux服务器的shell,并将shell输出的信息保存到一个日志文件,前台页面要实时显示日志文件的内容.这个问题难点在于如何判断哪些数据是新增加的,通过查看JDK 的帮助文档,java.io.RandomAccessFile可以解决这个问题.为了模拟这个问题,编写LogSvr和 LogView类,LogSvr不断向mock.log日...

weixin_33922670的博客 654
上一篇: JDBC batch批处理Statement executeBatch 详解
下一篇: struts2的namespace
cz_study_java
博客等级 码龄16年 5粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值