Java随机流RandomAccessFile//数组流ByteArrayInputStream/ByteArrayOutputStream

随机流

Java提供了专门用来处理文件输入输出功能更完善的RandomAccessFile类,该类比较特别,既可以输入又可以输出
也就是可以作为源也可以作为目的地

构造方法

  • RandomAccessFile(String name ,String mode)//name用来确定创建的源或目的地,mode只取r(只读)或rw(可读/写)
  • RandomAccessFile(File file, String mode)//file是指文件对象

RandomAccessFile类中比较关键的方法就是seek(long a),用来定位RandomAccessFile流的读写位置,a是指读写位置距离文件开头的字节个数(一个int类型的数据占4个字节)

RandomAccessFile类的常用方法(未完待续)

方法描述
close( )关闭文件
getFilePointer( )获取当前的读写的位置
length( )获取文件的长度
read( )从文件中读取一个字节的数据
readBoolean( )从文件中读取一个布尔值0代表false,其他值代表true
readByte( )文件中读取一个字节
readChar( )从文件中读取一个字符
readDouble( )从文件中读取一个双精度浮点值(8个字节)
readInt( )从文件中读取一个单精度浮点值(4个字节)
readFully(byte b[ ])读b.length字节放入数组b,完全填满该数组

将int型数据写入到一个文档中,然后倒序进行读出的例子

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

public class Example12_9 {
    public static void main(String[] args) throws IOException {
        File myFile = new File("C:\\Users\\Administrator\\Desktop","abc.txt");
        try{
            RandomAccessFile randomAccessFile = new RandomAccessFile(myFile,"rw");
            int date[] = {1,2,3,4,5,6,7,8,9,10};
            for (int i = 0; i < date.length; i++) {
                randomAccessFile.writeInt(date[i]);
            }
            for (int i = date.length - 1; i >= 0 ; i--) {
                randomAccessFile.seek(i*4); //一个int类型占4个字节,从数组的尾部开始读起
                System.out.printf(","+randomAccessFile.readInt());
            }
            randomAccessFile.close();   //最后记得关闭
        }
        catch (Exception E){
        }
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava Chapter_12.Part_6.Example12_9
,10,9,8,7,6,5,4,3,2,1
进程已结束,退出代码 0

数组流

流的源和目标除了可以是文件外,还可以计算机内存

字节数组流

ByteArrayInputStream流的构造方法

  • ByteArrayInputStream(Byte[ ] buf)//buf指定的数组的全部字节单元
  • ByteArrayInputStream(byte[ ] ,int offset ,int length)//offset是指从数组的offset处按顺序取出length字节单元

调用方法

  • public int read()//按顺序地从源中读取一个字节,该方法返回读取的字节值
  • public int read(byte[ ] b ,int off ,int len)//从源中读取len指定的字节数,并将指定的字节数从off位置存放到数组b中

ByteArrayOutputStream流的构造方法

  • ByteArrayOutputStream()//缓冲区默认大小32字节,大于时会自动增加
  • ByteArrayOutputStream(int size)//size指定缓冲区的大小

调用方法

  • public void write(int b)//
  • public void write(byte[ ] b,int off , int len)//从参数b中指定的len字节顺序地写入缓冲区,off指定从b中写出的字节的起始位置
  • public byte [ ] toByteArray()//返回输出流写入缓冲区的所有字节

字符数组流

CharArrayReader类
charArrayWriter类

向内存写入数据或读取数据的例子

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;

public class Example12_11 {
    public static void main(String[] args){
        try{
            //字节数组流
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();//创建一个字节数组输出流对象
            byte b [] = "how are you".getBytes();   //byte数组b
            byteArrayOutputStream.write(b);
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());  //获取输出的所有字节
            byte backByte[] = new byte[byteArrayOutputStream.toByteArray().length] ; //设置输出时的长度
            byteArrayInputStream.read(backByte);    //将要输入的存放到一个数组中
            System.out.println(new String(backByte));   //将字节数组进行输出
            //字符数组流
            CharArrayWriter charArrayWriter = new CharArrayWriter();
            char c [] = "i am fine".toCharArray();//创建字符数组
            charArrayWriter.write(c);   //将字符数组写入到内存中
            CharArrayReader charArrayReader = new CharArrayReader(charArrayWriter.toCharArray());//源是刚刚写入的字符数组
            char backChar[] = new char[charArrayWriter.toCharArray().length];
            charArrayReader.read(backChar);
            System.out.println(new String(backChar));   //
        }
        catch (Exception e){
        }
    }
}

运行结果

D:\HelloWorld\out\production\HelloJava Chapter_12.Part_7.Example12_11
how are you
i am fine

CET4P175

improvement
remote
provide
rub
fiction
occurrence
adopt
navigation
adventure
float

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值