文档章节

java的InputStream和OutputStream的理解

 黎小水
发布于 2017/03/20 16:06
字数 1694
阅读 11
收藏 0

1、在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)
2、任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象
既然它能产生出数据,我们就可以将数据取出,java对封装的通用方法就read()方法了--(出水龙头)
3、任何有能力接收数据源(流)的javaio对象我们就可以看作是一个OutputStream对象
同样,它能接收数据,我们就可以调用它的write方法,来让它接收数据--(进水龙头了,呵呵)
4、当然,我们可以在Inputstream和OutputStream数据源的基础上,从实际需要触发,
来重新封装出不同性能机制的输入、输出流了,java.io包中提供了很丰富的输入、输出流对象,如:
基于字节流的stream:
DataOutputStream----DataInputStream:
FileOutputStream-----FileInputStream:
.............等,可以用InputStream和OutputStream从JDK文档查阅
基于字符流的stream(典型的以write和reader来标识的):
FileWriter---FileReader:
StringWriter---StringReader:
.........等,你自己可以用Writer和Reader从JDK文档里头查看说明
stream应该是水龙头里的水资源,
InputStream:是一个出水龙头(把水封装在里头)的一个实物对象,该对象的read方法呢,就想成这个
出水龙头这一机制对象的开关钮,你read或openStream(其他对象包容InputStream对象的对象方法)一下呢,就等于打开了出水龙头的按钮,水就出来了,里头封装的水是什么性质的呢,你就用相应的容器来装,如string或byte[].....
OutputStream:你就在InputStream基础上反着想就ok了 
-------------------------------------------------------------------------------------------------------------------------
OutputStream
(1)输出数据
   void write(int b)往流中写一个字节b
   void write(byte b[])往流中写一个字节数组b
   void write(byte b[],int off,int len)把字节数组b中从下标off开始,长度为len的字节写入流中
 (2)
   flush()刷空输出流,并输出所有被缓存的字节
           由于某些流支持缓存功能,该方法将把缓存中所有内容强制输出到流中。
(3)关闭流
   close()流操作完毕后必须关闭。
------------------------------------------------------------------------------------------------------------------------
InputStream
(1)从流中读取数据
   int read() 读取一个字节,返回值为所读得字节
   int read(byte b[]) 读取多个字节,放置到字节数组b中,通常读取的字节数量为b的长度,返回值为实际独取的
                      字节的数量。
   int read(byte b[] ,int off,int len)读取len个字节,放置到以下标off开始字节数组b中,返回值为实际
                                       读取的字节的数量。
   int available() 返回值为流中尚未读取的字节的数量。
   long skip(long n);读指针跳过n个字节不读,返回值为实际跳过的字节数量
(2)关闭流
   close() 流操作完毕后必须关闭
(3)使用输入流中的标记
   void mark(int readlimit)纪录当前指针的所在位置.readlimit表示读指针读出的readlimit个字节后
                           所标记的指针位置才实效。
   void reset() 把读指针重新指向用mark方法所记录的位置
   boolean markSupported() 当前的流是否支持读指针的记录功能。
-----------------------------------------------------------------------------------------------------------------------

Java IO通过Stream(流)来实现。关于流,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。

而对应于流还有一个概念:输入、输出设备。这些设备可以是磁盘文件、键盘(输入设备)、显示器(输出设备)、打印机(输出设备)、网络套接字等等。

下面,我们就来了解“流”。

Java中定义了两种类型的流:字节型,和字符型。

字节流:处理字节的输入和输出。包括读写二进制数据等方面的内容。

字符流:处理字符的输入和输出。他采用的是Unicode编码,可以实现国际化。使用字符流的另外一个好处就是:字符流比字节流更有效率。

字节流:

字节流包含两个顶层抽象类:InputStreamOutputStream

1:字节流的两个顶层类是抽象类,分别是:InputStreamOutputStream

2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输  出。

下面简单介绍字节流的几个常用子类:::

字节流类

功能简单介绍

DataInputStream

包含了读取Java标准数据类型的输入流

DataOutputStream

包含了写Java标准数据类型的输出流

ByteArrayInputStream

从字节数组读取的输入流

ByteArrayOutputStream

写入字节数组的输出流

FileInputStream

从文件读入的输入流

FileOutputStream

写入文件的输出流

PrintStream

包含最常见的Print()和Println()的输出流

PushbackInputStream

返回一个字节到输入流,主要用于编译器的实现

PipedInputStream

输出管道

PipedOutputStream

输入管道

SequenceInputStream

将n个输入流联合起来,一个接一个按一定顺序读取

RandomAccessFile

随机访问文件

BufferInputStream

缓冲输入流

BufferOutputStream

缓冲输出流

FilterInputStream

实现了InputStream Interface

FilterOutputStream

实现了OutputStream Interface

InputStream

抽象类,描述流的输入

OutputStream

抽象类,描述流的输入

 

抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和

write()。这两个方法在InputStreamOutputStream中声明为抽象方法,由子流类overwrite实现。

2:每个抽象类都有子类来实现具体的功能,处理不同的设备的输入和输  出。

下面简单介绍字节流的几个常用子类:::

字节流类

功能简单介绍

DataInputStream

包含了读取Java标准数据类型的输入流

DataOutputStream

包含了写Java标准数据类型的输出流

ByteArrayInputStream

从字节数组读取的输入流

ByteArrayOutputStream

写入字节数组的输出流

FileInputStream

从文件读入的输入流

FileOutputStream

写入文件的输出流

PrintStream

包含最常见的Print()和Println()的输出流

PushbackInputStream

返回一个字节到输入流,主要用于编译器的实现

PipedInputStream

输出管道

PipedOutputStream

输入管道

SequenceInputStream

将n个输入流联合起来,一个接一个按一定顺序读取

RandomAccessFile

随机访问文件

BufferInputStream

缓冲输入流

BufferOutputStream

缓冲输出流

FilterInputStream

实现了InputStream Interface

FilterOutputStream

实现了OutputStream Interface

InputStream

抽象类,描述流的输入

OutputStream

抽象类,描述流的输入

抽象类InputStream和OutpurStream定义了实用的方法,其中最主要的是read()和

write()。这两个方法在InputStreamOutputStream中声明为抽象方法,由子流类overwrite实现。

本文转载自:

粉丝 0
博文 23
码字总数 5871
作品 0
长沙
私信 提问
JavaIO/输出输入入门

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

Zhao-Qian
2013/01/04
476
0
ZK7.0.3中从MongoDB下载文件

问题 在完成Spring从MongoDB中下载文件之GridFS之后,现在需要在ZK7.0.3的ViewModel中下载该文件。 思路 先从MongoDB获取到,以及把转化为ZK的Filedownload能够使用的进行文件下载。 实现 导...

亚林瓜子
2018/06/12
21
0
Java: I/O(1/3)字节流与字符流的纵向与横向比较

Summary 总述 java.io包中的类非常繁多,但其实只要归成4类: & 、 & ,由于功能和命名上都相当接近,因此只要掌握了其中一种,将会很容易理解其他3种。 横向归类: & (字节流)、 & (字符...

大鱼BIG_FISH
2015/11/16
148
2
深入理解 Java中的 流 (Stream)

最近在看《Hadoop:The Definitive Guide》,对其分布式文件系统HDFS的Streaming data access不能理解。基于流的数据读写,太抽象了,什么叫基于流,什么是流?Hadoop是Java语言写的,所以想理...

SeanCai
2012/12/19
274
6
JAVA IO 设计模式彻底分析

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

2k10
2015/03/13
280
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
47分钟前
4
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
14
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部