Java课程复习之IO输入输出

Java课程复习之I/O输入输出

一、流的分类

1.从流动方向上

  • 输入流:如System.in是一个InputStream类型输入流
  • 输出流:如System.out 是一个PrintStream类型输出流

2.从读取类型上

  • 字节流:如System.in是一个InputStream类型字节流
  • 字符流:如new InputStreamReader(System.in)是一个字符流对象

3.从发生的源头

  • 节点流:直接操作目标设备对应的流,如文件流,标准输入输出流
  • 过滤流:继承带有关键字Filter的流用于包装操作节点流,方便读写各种类型的数据

二、字节流和字符流

1.字节流

  • InputStream常用方法
    方法描述
    abstract int read()从流中读入数据,需要子类覆盖,调用read()方法后,只能向后读入数据,指针自动维护,不能后退。
    int read(byte b[])读多个字节到数组中——缓冲区,每调用本方法一次,就从流中读取相应的数据到缓冲区,同时返回读到的字节数目,如果读完则返回-1
    int read(byte b[], int off, int len)从输入流中读取最大长度为len的数据,写入数组b中从索引off开始的位置,并返回实际读取的字节数,如果读完则返回-1
    close()关闭流并释放相关的系统资源。
  • OutputStream常用方法
    方法说明
    write(int b) 抽象类将一个整数输出到流中
    write(byte b[])将字节数组中的数据输出到流中。
    write(byte b[], int off, int len将数组b中从off指定的位置开始,长度为len的数据输出到流中。
    flush()刷空输出流,并将缓冲区中的数据强制送出
    close()关闭流并释放相关的系统资源。

2.Java的标准输入输出流

  • 标准输入,对象是键盘,Java对应的类是System.in
  • 标准输出,对象是屏幕,Java对应的类是System.out
  • 标准错误输出,对象是屏幕,Java对应的类是System.err

3.Scanner读取终端输入

  • Scanner
    • 文本扫描器,可以读取各种 基本数据类型和字符串。
    • 默认分隔符为空格
    • import java.util.*;
      public class ScanIO {
        public static void main(String[] args) throws IOException {
           Scanner scan = new Scanner(System.in);
           System.out.println(scan.nextInt());
           System.out.println(scan.next());
           System.out.println(scan.nextDouble());
        }
      }
      

4.常用字节流

在这里插入图片描述

5.ByteArrayInputStream和ByteArrayOutputStream

  • 在字节数组和流之间搭建桥梁
  • ByteArrayInputStream构造方法:
    public ByteArrayInputStream(byte[] buf): 将字节数组作为字节流的数据源
  • ByteArrayOutputStream构造方法:
    public ByteArrayOutputStream():构造一个字节数组输出流,用于将多个字节写入到流中,最后可以整体转为一个字节数组

6.FileInputStream和FileOutputStream

  • 在文件和流之间搭建桥梁
  • FileInputStream构造方法:
    FileInputStream(String name):以文件路径名字构造一个文件输入流,打开一个与实际文件的连接,用于从该流中读取文件字节流
  • FileOutputStream构造方法:
    FileOutputStream(String name):以文件路径名字构造一个文件输出流,打开一个与实际文件的连接,用于文件的写字节流操作

7.PipedInputStream和PipedOutputStream

  • 通常用于将一个程序的输出连接到另一个程序的输入
  • 输出流作为管道的发送端,输入流作为管道的接收端
  • 使用前需要调用connect方法将输出流和输入流连接起来
  • 通常一个线程执行管道输出流的写操作,另一个线程执行管道输入流的读操作

8.字符流

在这里插入图片描述

9.字节流与字符流之间的转化

  • 输入字节流转为字符流需要用到InputstreamReader的构造方法: InputStreamReader(InputStream in)
  • 输出字符流转为字节流用到OutputStreamWriterPrintWriter的构造方法:
    • OutputStreamWriter(OutputStream out)
    • PrintWriter(OutputStream out)

10.流的装配

  • 过滤流BufferedInputStreamBufferedOutputStream
    • 缓存作用
    • 用于装配文件磁盘、网络设备、终端等读写开销大的节点流,提高读写性能
  • 过滤流BufferedReader
    • 用于缓存字符流,可以一行一行的读
  • 过滤流DataInputStreamDataOutputStream
    • 可从字节流中写入、读取Java基本数据类型,不依赖于机器的具体数据类型,方便存储和恢复数据
  • PrintWriter的使用
    • 可以向该字符流中写入Java基本数据类型,用于包装输出字符流类对象
    • 局限性:没有对应的输入流类用于恢复写入的Java基本类型数据

三、流的串行化

1.对象串行化

  • 串行化(Serialization):又称序列化,将实现了Seriallizable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象,后者又称反序列化
  • 串行化的目的:便于介质存储和网络传输
  • 使用ObjectInputStream类和ObjectOutputStream

四、文件操作

1.文件操作相关类或接口

名称类型说明
File文件(或目录)路径名字的抽象表示
FileDescriptor代表一个打开文件的文件描述。
FileInputStream字节流的形式顺序读文件。
FileReader字符流的形式顺序读文件。
FileOutputStream字节流的形式顺序文件。
FileWriter字符流的形式顺序写文件。
RandomAccessFile提供对文件的随机访问支持。

2.File类相关方法

类型名称
构造方法public File(String pathname);
public File(File parent, String child);
public File(String parent, String child);
文件名的处理String getName();
String getPath();String getAbsolutePath();
String getParent();
String renameTo(File newName);
文件属性测试boolean exists();
boolean canWrite();
boolean canRead();
boolean isFile();
boolean isDirectory();
文件信息和文件删除long lastModified();
long length();
boolean delete();
目录操作boolean mkdir();
String list();

3.File类

  • public String[] list(FilenameFilter filter):返回一个满足过滤器filter的文件列表
  • 文件过滤器接口FilenameFilter其包含一个抽象方法accept
  • 实现FilenameFilter接口的抽象方法accept, 在curdir.list(filter)方法内部调用;

4.随机文件操作

  • RandomAccessFile:文件指针可以随意定位,可以向前访问
  • 构造方法:
    • RandomAccessFile(File file, String mode)
    • RandomAccessFile(String name, String mode)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值