java之IO

InputStream:将外部物理设备(磁盘,网络等)中的数据读取到程序(内存)中,OutputStream:将程序中的数据输出到外部设备中。

流的分类

  • 按操作数据的单位分类:字节流(8bit,以byte为单位传输),字符流(16bit,以char为单位传输)
  • 按流的流向分类:输入流和输出流
  • 按流的角色分类:节点流和处理流

流体系

IO流体系

InputStream & Reader

  • 在读取文件时,必须保证文件存在,否则会跑IO异常。
  • 程序中所有的IO资源应该显示的关闭,因为它们不属于内存资源,GC无法回收。
  • int read(char [] c, int off, int len):读取字符到一个数组中的一部分。此方法将阻塞,直到有输入数据可用,发生I/ O错误,或者该流的末尾。返回已读取的字节数,如果已到达流的末尾将返回-1。

OutputStream & Writer

  • void write(int b/int c)
  • void write(byte[] b/char[] cbuf)
  • void write(byte[] b/char[] buff, int off, int len):将当前缓存buff中的数据写入到输出流中
  • void flush():将缓存中的数据强制同步到底层流中,默认情况下,缓存区满的情况下才往流中写入。如果这时关闭流则会导致数据丢失。 具体请参考
  • void close(): 需要先刷新,再关闭此流
因为字符流直接以字符作为操作单位,所以 Writer 可以用字符串来替换字符数组,即以 String 对象作为参数
  • void write(String str)
  • void write(String str, int off, int len)
  • 在写入一个文件时,如果目录下有同名文件将被覆盖。

缓冲流

根据数据操作单位可以把缓冲流分为:
  • BufferedInputStream 和 BufferedOutputStream
  • BufferedReader 和 BufferedWriter
  • 缓冲流要"套接"在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法
  • 对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush()将会使内存中的数据立刻写出
  • public String readline():读取一行文本,如果到达流的结尾将返回null。
  • bw.newLine():写入一个换行符

转换流

  • 将字节流按照指定的编码转换为字符流,效率更加的高效。
  • 需要用到字符编码的,参考
  • 编码:字符->字节数组
  • 解码:字节数组->字符

标准输入输出流

  • System.in:系统标准的输入设备,默认是键盘。类型为InputStream。
  • System.out:系统标准的输出设备,默认是显示屏。类型是PrintStream,其是OutputStream的子类FilterOutputStream 的子类。
  • 通过System类的setIn,setOut方法对默认设备进行改变。
    public static void setIn(InputStream in)
    public static void setOut(PrintStream out)

打印流

  • PrintStream:字节打印流
  • PrintWriter:字符打印流
  • 不会抛出异常,可以设置第二个构造参数为true,表示自动flush()。写入换行符或\n时都会刷新缓存区到输出流。

RandomAccessFile类

  • 支持随机访问的方式,程序可以直接跳到任意位置来读,写文件。如访问文件的部分内容,和向已经存在的文件中追加内容。
  • RandomAccessFile类中包含一个记录指针,用来表示当前读写的位置。可以自由的移动指针来改变读取的位置
    • long getFilePointer():获取文件记录指针的当前位置
    • void seek(long pos):将文件记录指针定位到 pos 位置
  • 构造器
    • public RandomAccessFile(File file, String mode)
    • public RandomAccessFile(String name, String mode)
    • mode表示访问模式
      • r: 以只读方式打开,调用write方法将会抛出IOException。
      • rw:打开以便读取和写入
      • rwd:打开以便读取和写入;同步文件内容的更新(默认情形下(rw模式下),是使用buffer的,只有cache满的或者使用RandomAccessFile.close()关闭流的时候儿才真正的写到文件)
      • rws:打开以便读取和写入;同步文件内容和元数据的更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值