package special;

import java.io.IOException;
import java.io.RandomAccessFile; /**
* 随机访问流:
*
* 此类不属于任何一个输入流和输出流
* 直接继承自Object实现的类
* 可以对文件随机的进行读和写!
* @author mzy
*
*
* JDK:
* 此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。
* 存在指向该隐含数组的光标或索引,称为文件指针;
* 输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。
* 如果随机访问文件以读取/写入模式创建,则输出操作也可用;
* 输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。
* 写入隐含数组的当前末尾之后的输出操作导致该数组扩展。
* 该文件指针可以通过 getFilePointer 方法读取,并通过 seek 方法设置。
*
* 通常,如果此类中的所有读取例程在读取所需数量的字节之前已到达文件末尾,则抛出 EOFException(是一种 IOException)。
* 如果由于某些原因无法读取任何字节,而不是在读取所需数量的字节之前已到达文件末尾,则抛出 IOException,而不是 EOFException。
* 需要特别指出的是,如果流已被关闭,则可能抛出 IOException。
*/
public class RandomAccessFileDemo {
// 第二个参数为mode:一共四种模式:
// 模式常用的 "r" 和 "rw"
// r read
// rw read and write
/* RandomAccessFile(File file, String mode) */
/* RandomAccessFile(String name, String mode) */
public static void main(String[] args) throws IOException {
write();
read();
} private static void read() throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw"); byte a = raf.readByte();
System.out.println("byte:" + a);
System.out.println("当前指针位置为:" + raf.getFilePointer()); int b = raf.readInt();
System.out.println("int:" + b);
System.out.println("当前指针位置为:" + raf.getFilePointer()); char c = raf.readChar();
System.out.println("char:" + c);
System.out.println("当前指针位置为:" + raf.getFilePointer()); boolean d = raf.readBoolean();
System.out.println("boolean:" + d);
System.out.println("当前指针位置为:" + raf.getFilePointer()); float e = raf.readFloat();
System.out.println("float:" + e);
System.out.println("当前指针位置为:" + raf.getFilePointer()); double f = raf.readDouble();
System.out.println("double:" + f);
System.out.println("当前指针位置为:" + raf.getFilePointer()); long g = raf.readLong();
System.out.println("long:" + g);
System.out.println("当前指针位置为:" + raf.getFilePointer()); String h = raf.readUTF(); // 2 + 3 + 3
System.out.println("UTF:" + h);
System.out.println("当前的指针位置为:" + raf.getFilePointer()); raf.seek(5);
char ch = raf.readChar();
System.out.println("定位指针为5: ch = " + ch); } private static void write() throws IOException {
RandomAccessFile raf = new RandomAccessFile("raf.txt", "rw"); raf.writeByte(100);
raf.writeInt(1000);
raf.writeChar('b');
raf.writeBoolean(true);
raf.writeFloat(12.34F);
raf.writeDouble(12.48);
raf.writeLong(123456789);
raf.writeUTF("中国"); // 不提供flush方法
raf.close();
}
}

关于RandomAccess的更多相关文章

  1. 256 terabytes random-access memory

    Computer Systems A Programmer's Perspective Second Edition As we will discuss, the extension of IA32 ...

  2. RandomAccess接口的使用

    RandomAccess在类Collections的shuffle()方法中的使用:(jdk源码如下) /** * Randomly permute the specified list using ...

  3. Jdk 接口类RandomAccess了解

    1. 接口说明 Marker interface used by List implementations to indicate that they support fast (generally ...

  4. Java集合类:"随机访问" 的RandomAccess接口

    引出RandomAccess接口 如果我们用Java做开发的话,最常用的容器之一就是List集合了,而List集合中用的较多的就是ArrayList 和 LinkedList 两个类,这两者也常被用来 ...

  5. Java的四个标记接口:Serializable、Cloneable、RandomAccess和Remote接口

    一.概述 标记接口是一些没有属性和方法的接口,也是一种设计思想.Java中的一个标记接口表示的的是一种类的特性,实现了该标记接口的类则具有该特性.如实现了Serializable接口的类,表示这个类的 ...

  6. RandomAccess

    在List集合中,我们经常会用到ArrayList以及LinkedList集合,但是通过查看源码,就会发现ArrayList实现RandomAccess接口,但是RandomAccess接口里面是空的 ...

  7. 分析轮子(七)- RandomAccess.java

    1:还是先上一个类的继承关系比较图吧! 2:看一下 RandomAccess.java 的源码,空空如也,什么都没有,那她有什么用处呢? /** * Marker interface used by ...

  8. Java容器解析系列(3) List AbstractList ListIterator RandomAccess fail-fast机制 详解

    做为数据结构学习的常规,肯定是先学习线性表,也就是Java中的List,开始 Java中List相关的类关系图如下: 此篇作为对Java中相关类的开篇.从上图中可以看出,List和AbstractLi ...

  9. Java Collections Framework 之 RandomAccess接口

    在研究Collections类的排序算法时候,看到这样的代码 : public static <T> int binarySearch(List<? extends Comparab ...

  10. 关于接口 RandomAccess

    今天看到java.util.Collections这个工具类中的 public static <T> void fill(List<? super T> list, T obj ...

随机推荐

  1. 将已经基本完成的项目推送到gitee上管理

    1,首先在gitee上创建仓库,保留一个.gitigonore就行,这样就得到一个远程仓库地址 2,仓库有文件,那么就需要先将这个文件pull下来: 在本地的项目目录中执行:git init git ...

  2. PAT甲级:1152 Google Recruitment (20分)

    PAT甲级:1152 Google Recruitment (20分) 题干 In July 2004, Google posted on a giant billboard along Highwa ...

  3. Linux下Apache(HTTP)基础知识梳理-运维笔记

    HTTP介绍: HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传 ...

  4. Nacos 2.0源码分析-拦截器机制

    温馨提示: 本文内容基于个人学习Nacos 2.0.1版本代码总结而来,因个人理解差异,不保证完全正确.如有理解错误之处欢迎各位拍砖指正,相互学习:转载请注明出处. Nacos服务端在处理健康检查和心 ...

  5. P3643 [APIO2016]划艇

    P3643 [APIO2016]划艇 题意 一个合法序列可表示为一个长度为 \(n\) 的序列,其中第 \(i\) 个数可以为 0 或 \([l_i,r_i]\) 中一个整数,且满足所有不为零的数组成 ...

  6. POJ3048

    素数筛,数据范围不大,直接暴力筛. 坑:有个数据是 1 1,答案是1.差点没把我卡去世. 我的三观哪去了. #include<iostream> #include<cstdio> ...

  7. mybatis的增删改查返回值小析(六)

    本文验证了通过mybatis访问数据库时的,增删改查的返回值情况. 直接看代码. 1.service层 /** *@Author: Administrator on 2020/3/12 15:15 * ...

  8. 第十二篇 -- 关于U盘制作启动盘后在本机上显示不出来的解决方案

    喜欢玩电脑的朋友应该都重装过系统,最常用的就是用U盘装系统.以前装系统都没问题,不过偶然一次发现了一个问题,就是那个被制作成启动盘的U盘,插在本机上只能显示EFI启动文件部分,而其他空间全都显示不出来 ...

  9. 【Logback日志级别】动态调整Logback的日志级别

    一.导入 Logback作为目前一个比较流行的日志框架,我们在实际项目经常使用到该框架来帮助我们打印日志,以便我们可以更快速地获取业务逻辑执行情况.定位系统问题. 常用的日志打印一共有5种级别控制,优 ...

  10. SQL Server 行转列 列转行操作

    1.多行转成一行(并以','分开) 表数据如下图: 查询结果如下图: SQL查询脚本: SELECT addPer, house_code = (STUFF((SELECT ',' + house_c ...