转换流
输入/输出流体系中还提供了两个转换流,这两个转换流用于将字节流转换成字符流,其中InputStreamReader将字节输入流转换成字符输入流, OutputStreamWriter将字节输出流转换成字符输出流。 在这里插入图片描述
缓冲流
在读写数据时,让数据在缓冲区能减少系统实际对原始数据来源的存取次数,因为一次能做多个数据单位的操作。相较而言,对于直接从文件读取数据或将数据写入文件,比起缓冲区的读写要慢多了。所以使用缓冲区的流,一般都会比没有缓冲区的流效率更高。拥有缓冲区的流被称为缓冲流,包括BufferedInputStream、BufferedOutputStream类和BufferedReader、BufferedWriter类。缓冲流把数据从原始流成块读入或把数据积累到一个大数据块后再成批写出,通过减少通过资源的读写次数来加快程序的执行。
BufferedReader类
BufferedReader是Reader的子类,可以Reader的方法。从字符输入流中读取文本,缓冲各个字符,从
而实现字符、数组和行的高效读取。下面是BufferedReader的够构造器和特有的方法
BufferedWriterr类
BufferedWriter类是Writer的子类。
访问数组
ByteArrayOutputStream和ByteArrayInputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区,然后利用ByteArrayOutputStream和ByteArrayInputStream的实例向数组中写入或读出byte型数据。在网络传输中我们往往要传输很多变量,我们可以利用ByteArrayOutputStream把所有的变量收集到一起,然后一次性把数据发送出去。
ByteArrayOutputStream:可以捕获内存缓冲区的数据,转换成字节数组。
ByteArrayInputStream:可以将字节数组转化为输入流。
CharArrayReader、CharArrayWriter的使用与ByteArrayOutputStream、ByteArrayInputStream差不多。
访问字符串
StringReader:用来将字符串转换成字符输入流。然后使用字符输入流提供的方式进行操作,也可以提供给其他高级字符输入流来使用。如可以将该字符输入流提供给BufferedReader输入流使用。
StringWriter:在内存中缓存读取到的所有字符串,然后使用通过toString方法一次性全部输出字符串。
RandomAccessFile类
RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据。RandomAccessFile支持“随机访问”的方式,程序可以直接跳转到文件的任意地方来读写数据。
RandomAccessFile四种访问模式:
“r”:以只读方式打开指定文件。如果试图对该RandomAccessFile执行写入方法,都将抛出IOException 异常。
“rw”:以读、写方式打开指定文件。如果该文件尚不存在,则尝试创建该文件。
"rws”:以读、写方式打开指定文件。相对于"rw"模式,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
“rwd”: 以读、写方式打开指定文件。相对于"rw"模式,还要求对文件的内容的每个更新都同步写入
到底层存储设备。
元数据是文件的附加属性,如文件大小、创建时间、所有者等信息。 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转换流输入/输出流体系中还提供了两个转换流,这两个转换流用于将字节流转换成字符流,其中InputStreamReader将字节输入流转换成字符输入流, OutputStreamWriter将字节输出流转换成字符输出流。缓冲流在读写数据时,让数据在缓冲区能减少系统实际对原始数据来源的存取次数,因为一次能做多个数据单位的操作。相较而言,对于直接从文件读取数据或将数据写入文件,比起缓冲区的读写要慢多了。所以使用缓冲区的流,一般都会比没有缓冲区的流效率更高。拥有缓冲区的流被称为缓冲流,包括BufferedIn
通过之前的学习我们知道文件的读写可用FileInputStream 和 FileOutputStream.然而它们只能一连串地读或写字节型数据。 如果我们可以定长地读取或写入数据自然会方便很多。 因此本篇博客介绍 DataOutputStream 与 DataInputStream 。可以写入或读取定长数据(int,double,boolean等) FileOutput...
3.如果 RandomAccessFile 作为输出 时,写出到的文件如果不存在,则在执行过程中自动创建。 如果写出到的文件存在,则会对原文件内容进行覆盖。(默认情况下,从头覆盖 4.可以通过相关的操作,实现Ran 序列化机制允许将对象 转换 成字节序列,保存在磁盘上,或者通过网络传输,以备重新恢复成对象。序列化机制可以使对象脱离程序运行独立存在。序列化是指把对象通过 存储到文件中。,反序列化就是从IO 恢复成对象。 使用对象 实现序列化的时候需要重写Serializable 接口才能被序列化。 private static void readData() throws IOException { ObjectInputStream in = new ObjectInputStream(ne 如果 RandomAccessFile 作为输出 出现,如果文件不存在,则会自动创建 1.RadomAccessFile不像其他 继承于四个 的抽象基 ,其直接继承于Object 2. RandomAccessFile 既可以作为输入 ,也可以作为输出 3.如果 RandomAccessFile 作为输出 出现,若文件存在,覆盖不是全部覆盖,而是一个个 对程序语言的设计者来说,创建一个好的输入/输出 (I/O) 系统是一项艰难的任务 Java IO:即 Java 输入/输出系统。大部分程序都需要处理一些输入,并由输入产生一些输出,因此 Java 为我们提供了 java .io 包 fileInputStream = new FileInputStream(mTempFile); bufferedInputStream = new BufferedInputStream(fileInputStream); byte[] buffer = new byte[2048]; int size = 0; DataProcessor tempDataPro... 这个是JDK上的截图,我们可以看到它的父 是Object,没有继承字节 、字符 家族中任何一个 。并且它实现了DataInput、DataOutput这两个接口,也就意味着这个 既可以读也可以写。 二、存在的意义 1、是 JAVA I/O 体系中功能最丰富的文件内容访问 ,它提供了众多方法来访问文件内容。 2、由于可以自由访问文件的任意位置,所以如果需要访问文件的部分内容,R...
Java RandomAccessFile 并没有提供直接读取一行文本的方法。但是,你可以使用 RandomAccessFile 中的readLine()方法以字节数组的形式读取一行文本。然后你可以将字节数组 转换 为字符串 型。以下是一个读取文件中所有文本行的示例代码: ``` java import java .io.IOException; import java .io. RandomAccessFile ; public class ReadFileLines { public static void main(String[] args) { try { RandomAccessFile file = new RandomAccessFile ("filename.txt", "r"); String line = ""; byte[] lineBytes; while ((lineBytes = file.readLine()) != null) { line = new String(lineBytes); System.out.println(line); file.close(); } catch (IOException e) { e.printStackTrace(); 在这个示例代码中,我们打开一个名为“filename.txt”的文件,使用readLine()方法读取每一行文本,并将其 转换 为字符串 型。然后我们将每一行打印到控制台上。