Java 基础 - 基本 IO

基本 IO

重要接口


重要类


字节类


InputStream

特点: 读取字节流的抽象类


BufferedInputStream

特点:

  • 用字节缓冲区来从 InputStream 中读取流
  • 缓冲区默认大小是 8K, 可能会增长
  • 实现了 mark() 和 reset() 方法
  • fill() 方法

ByteArrayInputStream

特点:

  • 从内存中的字节数组的字节读取流
  • 实现了 mark() 和 reset()

DataInputStream

特点:

  • 允许从下层流中以Java基本数据类型
  • 一个应用可以用 DataOutputStream 写入流再用 DataInputStream 读出

FilterInputStream

特点:

  • 建立在其他流之上, 提供附加功能

OutputStream

特点: 写入字节流的抽象类


BufferedOutputStream

特点: 增加了缓冲区, 使得不用每次 write() 都调用底层流 write()


ByteArrayOutputStream

特点: 将字节写入内存中的一段区域


DataOutputStream



特点:

  • 将基础类型数据写入流, 可移植
  • 读取时要用 DateInputStream

FilterOutputStream

特点: 为其他流提供附加功能的装饰流父类


字符类


Reader

特点: 读取字符流的抽象类


BufferedReader

特点:

  • 从字符流中读取文本到缓冲区, 以便更有效地被读取.
  • 缓冲区默认大小是8192(8KB).
  • 建议任何字符流的 Reader 都被 BufferedReader 所装饰. 否则每个 read()操作都会调用底层 read() 的操作.

LineNumberReader

特点: 在 BufferedReader 基础上保留了追踪行号


CharArrayReader

特点: 从内存缓冲区中读取字符到另外一个缓冲区


InputStreamReader

特点:

  • 用于桥接一个字节流成为字符流, 使得字节流以字符读取并编码
  • 每次 read()会触发一个或多个字节的读取操作. 为了更有效的将字节转化成字符, 有时会预读一些字节

FileReader

特点:

  • 读取文本文件的类
  • 其构造函数假设默认的字符编码和默认字节缓冲区大小是合适的
  • 若不合适, 需要用FileInputStream实力构造一个InputStreamReader对象,然后将这个对象传到其Reader构造函数.

FilterReader

特点: 抽象类, 用来读取Filtered字符流


PushbackReader

特点: 允许往字符流末尾添加一个或者多个字符


PipedReader

特点: 从管道PipedWriter中读取字符


StringReader

特点: 从String中读取字符


Writer

特点: 写入字符流的抽象类


BufferedWriter

特点:

  • 向字符输出流中写入文本, 为字符, 字符数组, 字符串提供缓冲以便更加有效的写入
  • 缓冲区默认大小是8192(8KB)
  • newLine()会往输出流中写入一个 line.separator
  • 建议任何字符流的 Writer 都被 BufferedWriter 所装饰. 否则每个 writer() 操作都会调用底层 write() 的操作

CharArrayWriter

特点:

  • 将内存中的一个字符缓冲区当做Writer使用
  • 当数据往流中写入时, 字符缓冲区大小会自动增长
  • 数据可以通过 toCharArray() 或者 toString()直接获取到
  • close() 方法没有什么作用. 即使调用了close()后, 再调用其他方法, 也不会产生异常

OutputStreamWriter

特点:

  • 用来将字符流桥接到一个字节流
  • 每次调用write()方法, 都会导致对字符的编码, 编码后的字节流一直在 buffer 中累计, 在调用底层字节流的write()方法时写入
  • 应该与BufferedWriter连用

FileWriter

特点:

  • 读取文本文件的类
  • 其构造函数假设默认的字符编码和默认字节缓冲区大小是合适的
  • 若不合适, 需要用FileOutputStream实力构造一个OutputStreamWriter对象,然后将这个对象传到其Writer构造函数.

FilterWriter

特点: 抽象类, 用来写入Filtered字符流


PipedWriter

特点: 向管道写入字符流


PrintWriter

特点:

  • PrintWriter 用来格式化对象并输出到字符流中
  • PrintWriter 包含了很多类型的写出方法, 但是不包括原始byte类型
  • 不像PrintStream, 即使打开了 automatic flushing , 方法printlnprintf或者 format 方法调用后才会 flush.

StringWriter

特点: 往StringBuffer 中写入数据

其他

FAQ

问: Externalizable 和 Serializable 的区别是什么?

答: 由于Serializable是一个标志接口. 使用Serializable不需要实现任何方法, Java runtime 会使用反射来 marshal 和 unmarshal 对象.

在Java 旧版本中, 反射非常慢, 所以 serializing 大对象会有一定的性能问题. 为了解决这个问题, Java 提供了 Externalizable 接口让开发人员自定义 marshal 和 unmarshal 方法.

在 Java 1.3 后, 反射的性能得到了大幅度提升. 现在很少有场景需要 Externalizable.

时间: 2024-10-09 16:34:05

Java 基础 - 基本 IO的相关文章

java基础之IO

java基础之IO 1,字节流与字符流常用方法: public class testIO { /** * 字符输入输出流实现文件的复制(类比字节操作) * @throws IOException * */ @Test public void testWriterReaderFileCopy() throws IOException{ Reader read = new FileReader("cyq1.txt"); Writer write = new FileWriter("

java基础篇IO流的规律

前两篇降了IO流中的字节流和字符流复制的例子,今天来总结一下IO流的规律 掌握好IO流的规律,再开发中会很好用 下面来总结一下: 1,明确源和目的 源:输入流 InputStream 和Reader 目的:输出流 OutputStream 和Writer 2,操作的数据是否是纯文本. 是:使用字符流 不是:使用字节流 3,当体系明确后,在明确要使用哪个具体的对象,通过设备来进行区分 源设备: 内存,硬盘,键盘 目的设备: 内存,硬盘,控制台 这里的源就是你想进行的操作,比如说你想从c盘复制一个文

JAVA 基础之 IO复习

一.文件: 在IO包中唯一与文件相关的类就是 File类. File类中常用的常量和方法 1.创建文件: 指定路径和将要创建的文件名字以及类型: 然后调用 createNewFile()方法 File file = new File("D:"+File.separator+"MyJavaProgram"+File.separator+"hello.java"); file.createNewFile(); 2.删除文件: 指定路径和文件,包括类型

Java基础: IO操作

最近抽了点时间回顾了java基础,昨天看了java的IO操作,把大致的总结写在这里. Java的IO操作主要是数据的输入.输出操作和文件管理,输入输出操作可以包括控制台.文件的输入输出和流的输入输出,流的输入输出可以用于文件,也可以用于网络数据. 控制台 控制台的输入输出中,输出大家最熟悉,最常用的就是System.out,那么输入操作可以用System.in,也可以System.console,区别是前者读入字节,后者读入字符串 文件处理 File类:可以实现对文件目录和文件的增删改,查看文件

java基础之IO流(一)

java基础之IO流(一)之字节流 IO流体系太大,涉及到的各种流对象,我觉得很有必要总结一下. 那什么是IO流,IO代表Input.Output,而流就是原始数据源与目标媒介的数据传输的一种抽象.典型数据源与目标媒介包括磁盘.网络.内存等等. IO流的分类: 按流向分为:输入流和输出流(本地内存为参考) 按处理数据单位:字符流和字节流 按照是否与特定的地方相连(磁盘.网络.内存):节点流和处理流 节点流:可以从或向一个特定的地方(节点)读写数据. 处理流:是对一个已存在的流的连接和封装,通过所

Java基础之IO技术(一)

---恢复内容开始--- Java基础中的IO技术可谓是非常重要,俗话说的好,万丈高楼起于垒土之间.所以学习Java一定要把基础学好,今天我们来学习IO技术的基础. IO无非就是输入与输出,而其中处理的数据无非是字符与字节.字符最简单的定义就是这个数据是否是纯文本组成,除此之外所有的都是字节.Java给我们提供了字符和字节的处理,其中字符的处理有Writer和Reader两个抽象父类(分别对应的是写和读),字节的处理有OutputStream和InputStream两个抽象类(分别对应的是写和读

java基础之IO操作

IO操作 ·文件类的使用(File) ·IO中流的基本使用(字符流.字节流.内存流.打印流) ·System类对IO的支持 ·对象序列化的问题 在整个的IO操作中,流的操作分为两种: ·字节流 字节输出流:OutputStream 字节输入流:InputStream ·字符流 字符输出流:Writer 字符输入流:Reader IO操作的基本步骤: 在Java的使用io的话,必须要按照以下的几个步骤进行(对文件操作来说): ·使用File找到一个文件 ·使用字节流或者字符流的子类为OutputS

Java基础总结--IO总结1

1.IO流(数据流)主要应用概述数据来源:存储在设备里面* IO流用来处理设备间数据之间的传输* Java对数据的操作是通过流的方式* Java用于对流的操作的对象都在IO包* 流按照流向分为:输出流(写动作)与输入流(读动作)(相对于程序来说) 读写的方式不同造成被封装成不同的对象* 按照一次操作数据的字节数目:字节流(1B)与字符流(2B)以前无字符流:ASCII码1B--表达英语的文字数字,随机计算机普及,为了表示更多国家的语言,兼容了许多国家的码表,这样不利于信息沟通,统一出了unico

java基础知识----IO篇

写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,文章依旧以例子为主,因为讲解内容的java书很多了,我觉的学以致用才是真.代码是写出来的,不是看出来的. 最后欢迎大家提出意见和建议. [案例1]创建一个新文件 1 2 3 4 5 6 7 8 9 10 11 import java.io.*; class hello{     public static void main(String[] args) {         File f=new File("D:\\he