RandomAccessFile关于多线程的一些知识

RandomAccessFile简介 RandomAccessFile功能构造函数特殊方法三级目录 功能 想比较之前的流要么读要么写,RandomAccessFile提供了读写操作RandomAccessFile声明在java.io包下,但直接继承于java.lang.Object类。并且它实现了Datalnput、DataOutput两个接口 看源码 public class RandomAccessFile implements DataOutput, DataInput, Closeable 构造函数 public RandomAcce 阅读详情

RandomAccessFile

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

RandomAccessFile不属于InputStream和OutputStream类系的。实际上,除了实现DataInput和DataOutput接口之外(DataInputStream和DataOutputStream也实现了这两个接口),它和这两个类系毫不相干,甚至不使用InputStream和OutputStream类中已经存在的任何功能;它是一个完全独立的类,所有方法(绝大多数都只属于它自己)都是从零开始写的。这可能是因为RandomAccessFile能在文件里面前后移动,所以它的行为与其它的I/O类有些根本性的不同。总而言之,它是一个直接继承Object的,独立的类。

基本上,RandomAccessFile的工作方式是,把DataInputStream和DataOutputStream结合起来,再加上它自己的一些方法,比如定位用的getFilePointer( ),在文件里移动用的seek( ),以及判断文件大小的length( )、skipBytes()跳过多少字节数。此外,它的构造函数还要一个表示以只读方式("r"),还是以读写方式("rw")打开文件的参数 (和C的fopen( )一模一样)。它不支持只写文件。

只有RandomAccessFile才有seek搜寻方法,而这个方法也只适用于文件。BufferedInputStream有一个mark( )方法,你可以用它来设定标记(把结果保存在一个内部变量里),然后再调用reset( )返回这个位置,但是它的功能太弱了,而且也不怎么实用。

RandomAccessFile的绝大多数功能,但不是全部,已经被JDK 1.4的nio的"内存映射文件(memory-mapped files)"给取代了,你该考虑一下是不是用"内存映射文件"来代替RandomAccessFile了。

[java]  view plain  copy
  1. import java.io.IOException;  
  2. import java.io.RandomAccessFile;  
  3.   
  4. public class TestRandomAccessFile {  
  5.     public static void main(String[] args) throws IOException {  
  6.         RandomAccessFile rf = new RandomAccessFile("rtest.dat", "rw");  
  7.         for (int i = 0; i < 10; i++) {  
  8.             //写入基本类型double数据  
  9.             rf.writeDouble(i * 1.414);  
  10.         }  
  11.         rf.close();  
  12.         rf = new RandomAccessFile("rtest.dat", "rw");  
  13.         //直接将文件指针移到第5个double数据后面  
  14.         rf.seek(5 * 8);  
  15.         //覆盖第6个double数据  
  16.         rf.writeDouble(47.0001);  
  17.         rf.close();  
  18.         rf = new RandomAccessFile("rtest.dat", "r");  
  19.         for (int i = 0; i < 10; i++) {  
  20.             System.out.println("Value " + i + ": " + rf.readDouble());  
  21.         }  
  22.         rf.close();  
  23.     }  
  24. }   


 

内存映射文件

内存映射文件能让你创建和修改那些因为太大而无法放入内存的文件。有了内存映射文件,你就可以认为文件已经全部读进了内存,然后把它当成一个非常大的数组来访问。这种解决办法能大大简化修改文件的代码。
fileChannel.map(FileChannel.MapMode mode, long position, long size)将此通道的文件区域直接映射到内存中。注意,你必须指明,它是从文件的哪个位置开始映射的,映射的范围又有多大;也就是说,它还可以映射一个大文件的某个小片断。


MappedByteBuffer是ByteBuffer的子类,因此它具备了ByteBuffer的所有方法,但新添了force()将缓冲区的内容强制刷新到存储设备中去、load()将存储设备中的数据加载到内存中、isLoaded()位置内存中的数据是否与存储设置上同步。这里只简单地演示了一下put()和get()方法,除此之外,你还可以使用asCharBuffer( )之类的方法得到相应基本类型数据的缓冲视图后,可以方便的读写基本类型数据。

[java]  view plain  copy
  1. import java.io.RandomAccessFile;  
  2. import java.nio.MappedByteBuffer;  
  3. import java.nio.channels.FileChannel;  
  4.   
  5. public class LargeMappedFiles {  
  6.     static int length = 0x8000000; // 128 Mb  
  7.   
  8.     public static void main(String[] args) throws Exception {  
  9.         // 为了以可读可写的方式打开文件,这里使用RandomAccessFile来创建文件。  
  10.         FileChannel fc = new RandomAccessFile("test.dat", "rw").getChannel();  
  11.         //注意,文件通道的可读可写要建立在文件流本身可读写的基础之上  
  12.         MappedByteBuffer out = fc.map(FileChannel.MapMode.READ_WRITE, 0, length);  
  13.         //写128M的内容  
  14.         for (int i = 0; i < length; i++) {  
  15.             out.put((byte) 'x');  
  16.         }  
  17.         System.out.println("Finished writing");  
  18.         //读取文件中间6个字节内容  
  19.         for (int i = length / 2; i < length / 2 + 6; i++) {  
  20.             System.out.print((char) out.get(i));  
  21.         }  
  22.         fc.close();  
  23.     }  
  24. }  


 

尽管映射写似乎要用到FileOutputStream,但是映射文件中的所有输出 必须使用RandomAccessFile,但如果只需要读时可以使用FileInputStream,写映射文件时一定要使用随机访问文件,可能写时要读的原因吧。

 

该程序创建了一个128Mb的文件,如果一次性读到内存可能导致内存溢出,但这里访问好像只是一瞬间的事,这是因为,真正调入内存的只是其中的一小部分,其余部分则被放在交换文件上。这样你就可以很方便地修改超大型的文件了(最大可以到2 GB)。注意,Java是调用操作系统的"文件映射机制"来提升性能的。

 

RandomAccessFile类的应用:

[java]  view plain  copy
  1. /* 
  2.  * 程序功能:演示了RandomAccessFile类的操作,同时实现了一个文件复制操作。 
  3.  */  
  4. package com.lwj.demo;  
  5.   
  6. import java.io.*;  
  7.   
  8. public class RandomAccessFileDemo {  
  9.  public static void main(String[] args) throws Exception {  
  10.   RandomAccessFile file = new RandomAccessFile("file", "rw");  
  11.   // 以下向file文件中写数据  
  12.   file.writeInt(20);// 占4个字节  
  13.   file.writeDouble(8.236598);// 占8个字节  
  14.   file.writeUTF("这是一个UTF字符串");// 这个长度写在当前文件指针的前两个字节处,可用readShort()读取  
  15.   file.writeBoolean(true);// 占1个字节  
  16.   file.writeShort(395);// 占2个字节  
  17.   file.writeLong(2325451l);// 占8个字节  
  18.   file.writeUTF("又是一个UTF字符串");  
  19.   file.writeFloat(35.5f);// 占4个字节  
  20.   file.writeChar('a');// 占2个字节  
  21.   
  22.   file.seek(0);// 把文件指针位置设置到文件起始处  
  23.   
  24.   // 以下从file文件中读数据,要注意文件指针的位置  
  25.   System.out.println("——————从file文件指定位置读数据——————");  
  26.   System.out.println(file.readInt());  
  27.   System.out.println(file.readDouble());  
  28.   System.out.println(file.readUTF());  
  29.   
  30.   file.skipBytes(3);// 将文件指针跳过3个字节,本例中即跳过了一个boolean值和short值。  
  31.   System.out.println(file.readLong());  
  32.   
  33.   file.skipBytes(file.readShort()); // 跳过文件中“又是一个UTF字符串”所占字节,注意readShort()方法会移动文件指针,所以不用加2。  
  34.   System.out.println(file.readFloat());  
  35.     
  36.   //以下演示文件复制操作  
  37.   System.out.println("——————文件复制(从file到fileCopy)——————");  
  38.   file.seek(0);  
  39.   RandomAccessFile fileCopy=new RandomAccessFile("fileCopy","rw");  
  40.   int len=(int)file.length();//取得文件长度(字节数)  
  41.   byte[] b=new byte[len];  
  42.   file.readFully(b);  
  43.   fileCopy.write(b);  
  44.   System.out.println("复制完成!");  
  45.  }  
  46. }  


RandomAccessFile 插入写示例:

[java]  view plain  copy
  1. /** 
  2.  *  
  3.  * @param skip 跳过多少过字节进行插入数据 
  4.  * @param str 要插入的字符串 
  5.  * @param fileName 文件路径 
  6.  */  
  7. public static void beiju(long skip, String str, String fileName){  
  8.     try {  
  9.         RandomAccessFile raf = new RandomAccessFile(fileName,"rw");  
  10.         if(skip <  0 || skip > raf.length()){  
  11.             System.out.println("跳过字节数无效");  
  12.             return;  
  13.         }  
  14.         byte[] b = str.getBytes();  
  15.         raf.setLength(raf.length() + b.length);  
  16.         for(long i = raf.length() - 1; i > b.length + skip - 1; i--){  
  17.             raf.seek(i - b.length);  
  18.             byte temp = raf.readByte();  
  19.             raf.seek(i);  
  20.             raf.writeByte(temp);  
  21.         }  
  22.         raf.seek(skip);  
  23.         raf.write(b);  
  24.         raf.close();  
  25.     } catch (Exception e) {  
  26.         e.printStackTrace();  
  27.     }  
  28. }  


 

利用RandomAccessFile实现文件的多线程下载,即多线程下载一个文件时,将文件分成几块,每块用不同的线程进行下载。下面是一个利用多线程在写文件时的例子,其中预先分配文件所需要的空间,然后在所分配的空间中进行分块,然后写入:

[java]  view plain  copy
  1. import java.io.FileNotFoundException;  
  2. import java.io.IOException;  
  3. import java.io.RandomAccessFile;  
  4.   
  5. /** 
  6.  * 测试利用多线程进行文件的写操作 
  7.  */  
  8. public class Test {  
  9.   
  10.     public static void main(String[] args) throws Exception {  
  11.         // 预分配文件所占的磁盘空间,磁盘中会创建一个指定大小的文件  
  12.         RandomAccessFile raf = new RandomAccessFile("D://abc.txt", "rw");  
  13.         raf.setLength(1024*1024); // 预分配 1M 的文件空间  
  14.         raf.close();  
  15.           
  16.         // 所要写入的文件内容  
  17.         String s1 = "第一个字符串";  
  18.         String s2 = "第二个字符串";  
  19.         String s3 = "第三个字符串";  
  20.         String s4 = "第四个字符串";  
  21.         String s5 = "第五个字符串";  
  22.           
  23.         // 利用多线程同时写入一个文件  
  24.         new FileWriteThread(1024*1,s1.getBytes()).start(); // 从文件的1024字节之后开始写入数据  
  25.         new FileWriteThread(1024*2,s2.getBytes()).start(); // 从文件的2048字节之后开始写入数据  
  26.         new FileWriteThread(1024*3,s3.getBytes()).start(); // 从文件的3072字节之后开始写入数据  
  27.         new FileWriteThread(1024*4,s4.getBytes()).start(); // 从文件的4096字节之后开始写入数据  
  28.         new FileWriteThread(1024*5,s5.getBytes()).start(); // 从文件的5120字节之后开始写入数据  
  29.     }  
  30.       
  31.     // 利用线程在文件的指定位置写入指定数据  
  32.     static class FileWriteThread extends Thread{  
  33.         private int skip;  
  34.         private byte[] content;  
  35.           
  36.         public FileWriteThread(int skip,byte[] content){  
  37.             this.skip = skip;  
  38.             this.content = content;  
  39.         }  
  40.           
  41.         public void run(){  
  42.             RandomAccessFile raf = null;  
  43.             try {  
  44.                 raf = new RandomAccessFile("D://abc.txt", "rw");  
  45.                 raf.seek(skip);  
  46.                 raf.write(content);  
  47.             } catch (FileNotFoundException e) {  
  48.                 e.printStackTrace();  
  49.             } catch (IOException e) {  
  50.                 // TODO Auto-generated catch block  
  51.                 e.printStackTrace();  
  52.             } finally {  
  53.                 try {  
  54.                     raf.close();  
  55.                 } catch (Exception e) {  
  56.                 }  
  57.             }  
  58.         }  
  59.     }  
  60.   
  61. }  
【RandomAccessFile类多线程场景踩坑】 背景 本来是想开发一个满足多线程场景需求的对指定内容写入log文件的工具类,同时拥有缓存机制,只有待写入内容超过缓存空间大小时才会进行写入。 但是在多线程测试时却发现,在多线程场景下,会存在文件内容与写入内容混乱的问题 如下:85列nnnn后面会写入tttt。 核心实现方法 //将指定内容写入指定文件,同时支持内容缓存,减少文件读写操作 public class FileUtil { public final static String filePath = "D:/TestFile/"; 阅读详情

相关推荐

基于RandomAccessFile的文件分片多线程读取的优化与拓展应用

本文聚焦文件读取优化,开篇指出上篇所讲多线程分片读文件虽精妙,能按指定划分分片、并发读取再合并,但处理超大文件有内存溢出隐患,严重影响系统稳定。随后阐述技术背景,当今文件常达 GB、TB 规模,传统单线程全量读取弊端尽显,既无法发挥多核并行优势,还易耗尽内存。而 RandomAccessFile 搭配多线程分片策略成为破局关键,它可灵活定位读写,精准控制处理量、预估行数,让数据如流水线产品有序处理,避免内存爆仓。文章后续还将深挖该机制潜力,探寻优化路径、解锁多元实用场景。

hangbingbihai的博客 983

RandomAccessFile详解

RandomAccessFile是Java 输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据。与普通的输入/输出流不同的是,RandomAccessFile支持"随机访问"的方式,程序可以直接跳转到文件的任意地方来读写数据。 RandomAccessFile可以自由访问文件的任意位置。 RandomAccessFile允许自由定位文件记录指针。 RandomAccessFile只能读写文件而不是流。 ...

qq_40100414的博客 3万+

RandomAccessFile的常见用法

1.RandomAccessFile的简介1.1为什么要用到RandomAccessFile我们平常创建流对象关联文件,开始读文件或者写文件都是从头开始的,不能从中间开始,如果是开多线程下载一个文件我们之前学过的FileWriter或者FileReader等等都无法完成,而当前介绍的RandomAccessFile他就可以解决这个问题,因为它可以指定位置读,指定位置写的一个类,通常开发过程中,多用...

qq_40208605的博客 3万+

RandomAccessFile学习笔记

本文将简要介绍这个类的使用,主要包括RandomAccessFile相关的一些概念,常见API的使用,如何利用RandomAccessFile实现一个断点续传的效果RandomAccessFile是什么?是 Java 中用于对文件进行随机访问的类。与普通的输入输出流不同,允许在文件中任意位置读写数据。RandomAccessFile的作用有哪些?随机访问:与其他输入输出流不同,允许在文件中任意位置进行读写操作,可以自由地定位文件指针。读写基本数据类型实现了DataInput和DataOutput。

热爱编程、热爱生活、热爱探索 4528

模拟IC设计笔记:拆解一个经典的时钟占空比校正(DCC)电路模块,从理论到SPICE仿真

本文深入解析了时钟占空比校正(DCC)电路在模拟IC设计中的关键作用,特别是在高速ADC应用中。通过晶体管级拆解,详细介绍了基于电荷泵和积分器的模拟反馈型DCC电路设计,包括占空比检测、误差放大与校正执行单元的实现。文章还提供了SPICE仿真验证方法,确保电路在100MHz时钟下的稳定性和性能。

weixin_33725722的博客 424

使用MID360在室内快速定位

在预构建的点云地图中实现实时3D全球定位。通过融合FAST-LIO的低频全局定位(约0.5~0.2Hz)和高频里程计,整个系统的计算效率很高。消除里程计的累计误差初始定位可以通过RVIZ的粗略手动估计或来自另一个传感器/算法的姿势来提供。

CTwinkle的博客 1161

RandomAccessFile类使用详解(转)

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

weixin_46875212的博客 1754

Metal 一、初识 Metal 及其语言规范

游戏开发者的新的技术平台,该技术能够为3D图像提高 10 倍的渲染性能。苹果2018年推出 Metal,在此之前一直使用OpenGL ES。1图形渲染;2高并发计算。苹果文档给出的 Metal 优化:CPU 低消耗、GPU 高利用、连续处理器并行、有效的资源利用Metal 官方文档。

irainsa的博客 1219

Java IO——RandomAccessFile类详解

一、RandomAccessFile介绍 RandomAccessFile支持对文件的读取和写入随机访问(其他的输入流或者输出流只能进行一种操作,要么输入,要么输出)。RandomAccessFile把随机访问的文件对象看作存储在文件系统中的一个大型 byte 数组,然后通过指向该 byte 数组的光标或索引(即:文件指针 FilePointer)在该数组任意位置读取或写入任意数据。输入操作从文件指针开始读取字节(以字节为单位进行读取),并随着对字节的读取而前移此文件指针。如果RandomAccessFi

b15735105314的博客 2万+

Python实战:5分钟搞定N-CMAPSS航空发动机数据集解析(附完整代码)

本文提供了一份针对N-CMAPSS航空发动机数据集的快速解析实战指南。通过Python的h5py和Pandas库,详细演示了如何高效读取HDF5格式文件、理解数据结构、提取关键特征(如传感器数据与剩余使用寿命RUL),并整合为可用于预测性维护分析的DataFrame,帮助研究者和工程师快速上手这一重要的工业时序数据集。

weixin_29083373的博客 278

VS2022错误列表高效处理:从复制到Excel表格的完整指南

本文详细介绍了在Visual Studio 2022中高效处理错误列表的实用技巧,重点讲解了如何将错误信息一键复制并粘贴到Excel表格中。通过基础操作、自定义视图、筛选功能及常见问题解决方案,帮助开发者将杂乱的编译错误整理成清晰、可排序、可筛选的数据表,极大提升了团队协作、错误分析和项目管理的效率。

weixin_28837817的博客 358

java用RandomAccessFile实现多线程下载

利用RandomAccessFile实现文件的多线程下载,即多线程下载一个文件时,将文件分成几块,每块用不同的线程进行下载。下面是一个利用多线程在写文件时的例子,其中预先分配文件所需要的空间,然后在所分配的空间中进行分块,然后写入: [java] view plaincopy import java.io.FileNotFoundException;   import java.io.IOE

zbqyexingkong的专栏 1504

瑞萨芯片串口配置,基于RL78芯片的串口使用配置

在这里隆重给大家介绍瑞萨编辑器CS+ for CA 的自动生成代码功能,只需要配置几个参数,就可以得到你想要的串口配置了,我现在已经忘记怎么手动配置寄存器了,哈哈。选择设置,此时将端口设置成功接下来设置时钟,根据自己的芯片所需设置相应的时钟,自己芯片是什么时钟查看数据手册和原理图可以找到。瑞萨芯片的串口配置其实和ST芯片的串口配置差不多,只是ST芯片的中文数据手册比较多,就更好配置了,找到所需要的串口配置IO口,此时将UART0 配置为引脚P61和P62,瑞萨芯片的串口配置竟然要配置串口。

qq_45315904的博客 4302

Java复习之知识点整理(十五)----文件切片、RandomAccessFile、多线程复制、序列化 反序列化、深度复制

一、文件切片-----------------------------------------------------@Test /** * 测试文件切片 * @throws Exception */ public void tsCutFile() throws Exception { cutFile("D:\\test\\新建文件夹\\d.txt",3); } ...

xcvbxv01的博客 328

知识的定义与分类体系详解 - 从零基础到专业理解

知识的定义与分类体系详解 - 从零基础到专业理解

engchina的专栏 4361

视觉Transformer实战 | 将卷积引入视觉Transformer(CvT)

CvT 是一种融合卷积神经网络与 Vision Transformer 优势的视觉模型,旨在解决 ViT 缺乏平移不变性和局部性等归纳偏置的问题。CvT 采用分层结构逐级降采样,使用卷积词元嵌入代替传统 patch 切分,引入卷积投影替代线性投影。这些设计使得 CvT 能够去除位置编码,在高分辨率输入下表现更优。本节深入解析 CvT 的核心原理,并提供完整的 PyTorch 代码实现,演示如何在实际数据集上训练和评估 CvT 模型。

盼小辉丶的博客 725

java多线程 选择题

方法resume( )负责重新开始哪个线程的执行?( D ) A.被stop( )方法停止的线程 B.被sleep( )方法停止的线程 C.被wait( )方法停止 D.被suspend( )方法停止 RandomAccessFile类的哪个方法可用于从指定流上读取整数?(A) A.readInt B.readLine C.seek D.close 设...

Wangjunhe0819的博客 3896

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java多线程文件下载器

RandomAccessFile 类的运用HttpURLConnection 类的运用线程池的使用原子类 LongAdder 的运用CountDownLatch 类的运用ScheduledExecutorService 类的运用线程在创建,销毁的过程中会消耗一些资源,为了节省这些开销,jdk 添加了线程池。线程池节省了开销,提高了线程使用的效率。阿里巴巴开发文档中建议在编写多线程程序的时候使用线程池。

是谢添啊 802

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

2024年Android最新Android多线程断点续传下载原理及实现(1),美团技术二面

下面是有几位Android行业大佬对应上方技术点整理的一些进阶资料。希望能够帮助到大家提升技术高级UI,自定义ViewUI这块知识是现今使用者最多的。当年火爆一时的Android入门培训,学会这小块知识就能随便找到不错的工作了。不过很显然现在远远不够了,拒绝无休止的CV,亲自去项目实战,读源码,研究原理吧!网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!

2401_84132496的博客 632

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 网络程序下载,Android从网络上下载文件

现在网络上关于Android下载的代码很多,但是光看还是无法完全理解和掌握,所以决定自己手写一个,以加深学习。在写下载代码之前,有几点知识必须要掌握:1.Http请求报文格式及响应报文,可以通过使用wireshark来对报文进行抓取,查看http协议的报文2.HttpUrlConnection的使用3.RandomAccessFile类的使用(可断点下载)这里写的下载是关于断点下载的。断点下载的原...

weixin_35941686的博客 595

java基础知识回顾

1.异常处理: 1.  throws和throw关键字:   a)  throws抛出异常,在方法中不处理任何的异常,而交给被调用处   b)  throw人为抛出一个异常对象   c)  问:try {}里有一个return语句,那么紧跟在这个try后的finally  {}里的code会不会被执行,什么时候被执行,在return前还是后? 答: 因为讲过遇到return关键字就是返

billycoder的专栏 561

RandomAccessFile的用法

1.RandomAccessFile的简介 1.1为什么要用到RandomAccessFile 我们平常创建流对象关联文件,开始读文件或者写文件都是从头开始的,不能从中间开始,如果是开多线程下载一个文件我们之前学过的FileWriter或者FileReader等等都无法完成,而当前介绍的RandomAccessFile他就可以解决这个问题,因为它可以指定位置读,指定位置写的一个类,通常开发过程中...

任枫的博客 2388

Java中RandomAccessFile用法

文章目录 介绍 RandomAccessFile 使用 创建对象 写方法 读取方法 介绍 java.io.RandomAccessFile 1、读写文件的工具 2、将文件中的字节数据,当作数组,用下标访问指定位置的字节值 RandomAccessFile 既可以读取文件内容,也可以向文件输出数据。同时,RandomAccessFile 支持“随机访问”的方式,程序快可以直接跳转到文件的任意地方来读写数据。 由于 RandomAccessFile 可以自由访问文件的任意位置,所以如果需要访...

uuqaz的博客 9193

RandomAccessFile多线程下载文件

在这之前,散仙还是喜欢先啰嗦的介绍下RandomAccessFile这个类,RandomAccessFile是Java中输入,输出流体系中功能最丰富的文件内容访问类,它提供很多方法来操作文件,包括读写支持,与普通的IO流相比,它最大的特别之处就是支持任意访问的方式,程序可以直接跳到任意地方来读写数据。 如果我们只希望访问文件的部分内容,而不是把文件从头读到尾,使用RandomAccessF

赶路人儿 2289

使用RandomAccessFile实现多线程下载

使用写流来下载网上的资源,用多线程对资源进行下载。      第一步:创建两个java脚本,一个服务器,一个客户端 首先推出多线程下载的实现原理   第二步:服务器部分   继承  Thread              1、定义四个变量(线程id、文件下载的路径、文件保存的路径、单个线程下载的数据量) public int id;//线程id public U

BIHUA0918的博客 940
上一篇: 匿名内部类与匿名对象
下一篇: 安卓虚拟机无法联网解决
Manaasdfasdf
博客等级 码龄11年 131粉丝 151原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值