文档章节

java 篇之IO InPutSteam,outPutStream

开源大法好啊
 开源大法好啊
发布于 2017/07/22 09:01
字数 443
阅读 2
收藏 0

这里只介绍传统I/O(也就是阻塞的IO)

java IO家族的类实在太多,每个类都有其历史原因所在(所以不要抱怨Java IO难用了)

老习惯,我们首先从顶层父类说起

1、InputStream 

这里面有两个特殊的类,是在jdk1.7加的,作用是你可以在try(这里去创建流,不需要在手动关闭流了,十分推荐这种方式,在也不怕流关闭不了){}catch(..){}

1、read() 单字节读取

2、read(byte[]) 批量读取,每次读取byte.length  (其实底层也是单字节的形式读取

3、read(byte[],int off,int len) 虽然也是批量读取,其实底层本质还是单字节读取 ,我们来看下源码

public int read(byte b[], int off, int len) throws IOException {
    if (b == null) {
        throw new NullPointerException();
    } else if (off < 0 || len < 0 || len > b.length - off) {
        throw new IndexOutOfBoundsException();
    } else if (len == 0) {
        return 0;
    }

    int c = read();  //首先读取一个字节 (这样做的原因是读取到末尾时候就直接返回,提升效率,很好的设计思想)
    if (c == -1) {
        return -1;
    }
    b[off] = (byte)c; //这里可以看到其实是每次都是一个字节一个字节读取的(这种是传统I/O慢的原因啊)

    int i = 1;
    try {
        for (; i < len ; i++) {
            c = read();
            if (c == -1) {
                break;
            }
            b[off + i] = (byte)c;
        }
    } catch (IOException ee) {
    }
    return i; //读取字节的个数
}

其他内部方法就不介绍(因为很少用到)

2、对于输出流OutPutStream() 输出流其实也是单子字节的写

public void write(byte b[], int off, int len) throws IOException {
    if (b == null) {
        throw new NullPointerException();
    } else if ((off < 0) || (off > b.length) || (len < 0) ||
               ((off + len) > b.length) || ((off + len) < 0)) {
        throw new IndexOutOfBoundsException();
    } else if (len == 0) {
        return;
    }
    for (int i = 0 ; i < len ; i++) {
        write(b[off + i]); //每次只写入一个字节
    }
}

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
开源大法好啊
粉丝 2
博文 42
码字总数 17798
作品 0
闵行
JavaIO/输出输入入门

IO称之为输入输出,Java的IO是通过java.io包下的类和接口来支持,包含两大类:输入,输出. 在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Write...

Zhao-Qian
2013/01/04
0
0
java基础io流——配角也风流(不求甚解)

本章简单介绍几个常见的io流派生。 1:数据操作流(操作基本类型数据的流)(理解) 代码示例: 2:内存操作流(理解) 用于处理临时存储信息的,程序结束,数据就从内存中消失。 代码示例: 注:查看...

潇潇漓燃
05/30
0
0
《Python3.6官方文档》– 六月翻译邀请

原文链接 邀请者:小村长 概述 本篇是 Python官方文档的的翻译邀请函。只从AlphaGo成功挑战世界围棋冠军之后,在软件工程界掀起了一股人工智能热。而Python凭借着大量丰富的机器学习库迎来了...

xiaocunzhang
01/15
0
0
【IO】- IO 体系中的设计模式-装饰模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zt15732625878/article/details/82694624 前言 最近在学习IO 这块内容,结合经典的装饰模式,说下IO库中体现的...

大白快跑8
09/13
0
0
JAVA IO 设计模式彻底分析

一。引子(概括地介绍Java的IO)   无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充。它采用了流的 机制来实现输入...

2k10
2015/03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ajax 提交返回map集合 获取不到值

后台java代码 @RequestMapping("/cameraList") @ResponseBody public Map<String, Object> cameraListForPage(@RequestParam(defaultValue = "1", value = "page") Integer page......

S三少S
7分钟前
0
0
TypeScrip最污的技术课-技术胖TypeScript图文视频教程

近日Node.js之父瑞安达尔(Ryan Dahl)发布新的开源项目 deno,从官方介绍来看,可以认为它是下一代 Node,使用 rust 语言代替 C++ 重新编写跨平台底层内核驱动,上层仍然使用 V8 引擎,最终...

JamesView
9分钟前
5
0
Es学习笔记

1.过滤排重聚合查询 筛选出某一个聚合值的个数统计。相当于mysql的distinct. 关键字:cardinality "aggs": { "2":{ "cardinality": { "field": "field" } ...

Gmupload
12分钟前
0
0
h5语义化标签

语义化HTML:用最恰当的HTML元素标签做恰当的事情。 优点: 提升可访问性; SEO; 结构清晰,利于维护; 通用容器:div——块级通用容器;span——短语内容无语义容器。 <title></title>:简...

莫西摩西
18分钟前
0
0
修改11g rac中 asm diskstring的发现路径

问题 : 如果我 们asm_disking以前是/dev/oracleasm/disks/* ,并且现在已经有磁盘组再用这个磁盘串了,那么,我们无法直接修改这个发现串为 ORCL:*,修改会报错,提示存在的磁盘无法使用新的...

tututu_jiang
20分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部