文档章节

java 篇之IO InPutSteam,outPutStream

开源大法好啊
 开源大法好啊
发布于 2017/07/22 09:01
字数 443
阅读 5
收藏 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]); //每次只写入一个字节
    }
}

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
开源大法好啊
粉丝 3
博文 42
码字总数 17798
作品 0
闵行
私信 提问
java的IO流很重要,初识InputStream

这是我从《java编程思想》中摘录的,看了他介绍的这一小节,我对InputStream有了很整体的认识。 “创建单一的结果流,却需要创建多个对象” 这句话说出了很多人的心声,感觉流很繁琐,一层嵌...

整理秀逗的脑袋
2011/09/19
6.1K
2
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:内存操作流(理解) 用于处理临时存储信息的,程序结束,数据就从内存中消失。 代码示例: 注:查看...

潇潇漓燃
2018/05/30
0
0
IO流 流的到底是什么?

在下初学Java到现在也有1年了,刚开始学只知道io流很重要,io流的各种操作方法,io流可以通过网络传输数据,学啊学,学会了io流的操作。但刚才忽然一下,流到底是什么?以Java为例,io流大家...

唱不完的离歌
2016/09/06
1K
11
【IO】- IO 体系中的设计模式-装饰模式

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

大白快跑8
2018/09/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

前嗅ForeSpider教程:采集黄页88

以黄页88为例,采集当前列表页新闻的正文数据: 第一步:新建任务 ①点击左上角“加号”新建任务,如图1: 【图1】 ②在弹窗里填写采集地址,任务名称,如图2: 【图2】 ③点击下一步,选择进...

forespider
15分钟前
1
0
Spring Cloud Alibaba基础教程:Nacos 生产级版本 0.8.0

昨晚Nacos社区发布了第一个生产级版本:0.8.0。由于该版本除了Bug修复之外,还提供了几个生产管理非常重要的特性,所以觉得还是有必要写一篇讲讲这次升级,在后续的文章中也都将以0.8.0版本为...

程序猿DD
23分钟前
1
0
HTML+CSS实现div的高度自适应填满剩余空间的7种方法

如图上下两部分,上面部分适应内容的高度,下面部分填充剩余部分。 当下面内容不够时,在下面部分出现滚动条 有2种情况 1.上面内容的高度适应内容,只有2种方法(flex、quirks+table) 2.上面...

linsk1998
27分钟前
1
0
Oracle学习日志-8(查询结果排序)

要用到的表如下 书上写到,上面的查询结果排序是随机的,再执行几次结果可能不同,但是我执行多次后,查询结果的排序都是如此,是因为oracle的默认处理方式是按照物理储存顺序查询的,而我在...

白话
34分钟前
1
0
Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column xxx

1. 错误提示 Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column xxx 2. 问题分析 从上面的描述我们可以看出原因是:我们给类型是datetime的xxx字段赋值0000-00......

易冥天
36分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部