zoukankan      html  css  js  c++  java
  • IO流详细总结

    流的定义:流是指一连串流动的字符,是以先进先出方式发送信息的通道。

    按流向分:输出流:OutputStream和Writer为基类

                输入流:InputStream和Reader为基类
    

    按处理数据单元划分:字节流:字节输入流:InputStream基类

                                                字节输出流:OutputStream基类
    
                                  字符流:字符输入流:Reader基类
    
                                   字节输出流:Writer基类
    

    (字节流是 8 位通用字节流,字符流是16位Unicode字符流)

    1.1 InputStream

    引入相关的类:InputStream ins =null;

    构建输入流,例如FileInputStream:

    ins =new FileInputStream(new File(path));

    操控字节输入流的,所用的方法也是针对字节的。
    tips:

    关于InputStream.read(byte[] b)和InputStream.read(byte[] b,int off,int len)这两个方法都是用来从流里读取多个字节的,有经验的程序员就会发现,这两个方法经常 读取不到自己想要读取的个数的字节。比如第一个方法,程序员往往希望程序能读取到b.length个字节,而实际情况是,系统往往读取不了这么多。仔细阅读Java的API说明就发现了,这个方法 并不保证能读取这么多个字节,它只能保证最多读取这么多个字节(最少1个)。因此,如果要让程序读取count个字节,最好用以下代码:

    byte[] b = new byte[count];

    int readCount = 0; // 已经成功读取的字节的个数

    while (readCount < count) {

    readCount += in.read(bytes, readCount, count - readCount);

    }

    用这段代码可以保证读取count个字节,除非中途遇到IO异常或者到了数据流的结尾(EOFException)

  • 相关阅读:
    zookeeper 简介
    缓存雪崩 缓存穿透
    SpringCloud实战2-Ribbon客户端负载均衡
    SpringCloud实战1-Eureka
    JVM笔记9-Class类文件结构
    JVM笔记8-虚拟机性能监控与故障处理工具
    JVM笔记7-内存分配与回收策略
    SpringAOP-JDK 动态代理和 CGLIB 代理
    MySQL多数据源笔记5-ShardingJDBC实战
    MySQL多数据源笔记4-Mycat中间件实战
  • 原文地址:https://www.cnblogs.com/yds1314/p/13954591.html
Copyright © 2011-2022 走看看