小言_互联网的博客

Java随机流/数组流(20.5.14)

403人阅读  评论(0)

随机流

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


转载:https://blog.csdn.net/ouqianbei/article/details/106118939
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场