文档章节

java io InputSteam

牛哥哥
 牛哥哥
发布于 2012/08/11 10:50
字数 357
阅读 122
收藏 0

1. Inputstream的类层次

image

看看jdk源代码中是如何描述该类的:


   
public abstract class InputStream implements Closeable

抽象类不能被实例化, 子类实现或继承该类方法, 所以我们经常看到


   
InputStream in = new FileInputStream( " /opt/1.txt " );

2. InputStream类定义了字节流的基本操作

image

我们可以查看第三个read方法的源代码, 可以看出来InputStream是一个字节一个字节的读取的

注意观察for循环里面的字节读取。 因为nio是以块的方式读取, 所以对某些应用场景性能上要优于io


   
public int read( byte b[], int off, int len) throws IOException { // ..... int c = read(); if (c == - 1 ) { return - 1 ; } b[off] = ( byte )c; int i = 1 ; try { for (; i < len ; i ++ ) { c = read(); if (c == - 1 ) { break ; } b[off + i] = ( byte )c; } } catch (IOException ee) { } return i; }

关于read方法,还有一个比较重要的地方,


   
/** * Reads the next byte of data from the input stream. The value byte is * returned as an int in the range 0 to 255. * If no byte is available because the end of the stream * has been reached, the value -1 is returned. This method * blocks until input data is available, the end of the stream is detected, * or an exception is thrown. * * <p> A subclass must provide an implementation of this method. * * @return the next byte of data, or -1 if the end of the * stream is reached. * @exception IOException if an I/O error occurs. */ public abstract int read() throws IOException;

大家注意这句话:  blocks until input data is available, the end of the stream is detected

就是说是一直阻塞直到检测到流末尾

© 著作权归作者所有

牛哥哥
粉丝 2
博文 8
码字总数 1984
作品 0
大渡口
高级程序员
私信 提问
java的IO流很重要,初识InputStream

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

整理秀逗的脑袋
2011/09/19
6.2K
2
Java FileInputStream

一、序言 IO操作,才程序中比较普遍,JAVA 中提出了IO/NIO 的概念,也一直在说NIO 比IO快,一直不知道原因,就想memcache 和ehcache 比较优劣一样,这些东西得自己看看如何实现的,才 知道区...

pczhangtl
2014/08/03
172
0
泥沙砖瓦浆木匠/java-core-learning-example

感谢赞助的ta们 Java 核心系列教程,关于Java核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。 包括基础语法,OOP,字符串,集合,IO,反射,线程,网络等。 未完成模块:阿里J...

泥沙砖瓦浆木匠
04/02
0
0
聊聊java String的intern

序 本文主要研究一下java String的intern String.intern() java.base/java/lang/String.java 当调用intern方法时,如果常量池已经包含一个equals此String对象的字符串,则返回池中的字符串 ...

go4it
04/06
24
0
DirectByteBuffer更快吗?

ByteBuffer.allocateDirect vs ByteBuffer.allocate 操作系统的IO机制 操作系统在内存区域上执行IO操作,这些内存区域是连续的字节。毫无疑问只有字节缓冲区才有资格参与IO操作的。同样操作系...

智深
2012/12/04
2.5K
0

没有更多内容

加载失败,请刷新页面

加载更多

Podman 使用指南

> 原文链接:Podman 使用指南 Podman 原来是 CRI-O 项目的一部分,后来被分离成一个单独的项目叫 libpod。Podman 的使用体验和 Docker 类似,不同的是 Podman 没有 daemon。以前使用 Docker...

米开朗基杨
43分钟前
5
0
拯救 项目经理个人时间的5个技巧

优秀的项目经理都有一个共同点,那就是良好的时间管理能力。专业的项目经理会确保他们的时间投入富有成效,尽可能避免时间浪费。 时间管理叫做GTD,即Getting Things Done——“把事情做完”...

Airship
今天
6
0
LNMP环境介绍,Mariadb安装,服务管理,mariadb安装3

LNMP环境介绍 Nginx 处理的请求有两种,分为 静态与动态 图片,js,css,视频,音频,flash 等都是静态请求,这些数据都不是保存在数据库里面的 动态请求一般来说,需要的数据是在数据库里面...

doomcat
今天
1
0
前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
7
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部