java的InputStream和OutputStream的理解【转】

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实现。

时间: 2024-11-03 03:45:15

java的InputStream和OutputStream的理解【转】的相关文章

【转载】关于java 的InputStream和OutputStream的理解

关于InputStream和OutputStream的输入输出方向的理解 InputStream输入类,首先需要读取的内容转化成输入流,再从它那里进行读取,先关联源:之后过程中关联目的,这样形成了流: 把要读取的内容输入到输入流,再从输入流进行读取,所以是read() OutputStream输出类,首先需要与写入的目的地相关联,然后通过它进行写入,首先关联的是流的目的:之后的过程中再关联源,这样形成了流 把要输出的东西通过输出流输出到目的地,所以是write() 下面的例子就是将f中的内容读至

java(jdk1.7) IO系列01之InputStream和OutputStream解析

1.InputStream和OutputStream简介 在java中InputStream和OutputStream分别代表字节输入流和字节输出流,表示以字节的方式来实现进程或者程序的通信,InputStream是输入流,表示以字节的方式从文件(FileInputStream)或者字节数组(ByteArrayInputStream)等读取数据,与之相对应的OutputStream是输出流,表示以字节的方式向文件(FileOutputStream)或者字节数组(ByteArrayOutputSt

Java之IO(一)InputStream和OutputStream

转载请注明源出处:http://www.cnblogs.com/lighten/p/6964702.html 1.前言 计算机的IO操作一直都是比较重要的一环,IO顾名思义,就是输入输出流.不管是磁盘IO还是网络IO,数据流转就离不开IO,理解Java的IO操作类很重要,本文介绍IO的抽象父类InputStream和OutputStream,这是Java的IO操作基础,理解完抽象类,对于其它的IO流也有很大的帮助. 流都实现了Closeable接口,也就是都需要关闭.输出流额外实现了一个Flus

java中如何将OutputStream转换为InputStream

在不需要文件生成的情况下,直接将输出流转换成输入流.可使用下面的三种方法: 如果你曾经使用java IO编程,你会很快碰到这种情况,某个类在OutputStream上创建数据而你需要将它发送给某个需要从输入流读取数据的类. 你很快会被问道,“java中如何将OutputStream转换为InputStream?” 方法一:使用字节数组缓存数据 最简单的方法是用字节数组缓存数据.代码 ByteArrayOutputStream out = new ByteArrayOutputStream();

Java流家族之InputStream、OutputStream

Java流家族之InputStream 实现的接口: Closeable , AutoCloseable 已知直接子类: AudioInputStream , ByteArrayInputStream , FileInputStream , FilterInputStream , InputStream , ObjectInputStream PipedInputStream , SequenceInputStream , StringBufferInputStream 具体的方法: Modif

Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)

学习目标 掌握流的概念 掌握字节流与字符流的作用 掌握文件的标准操作步骤 掌握字节与字符操作的区别 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序中需要数据的时候就用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输出都是以流的形式保存的,流中保存的实际上全部是字节文件. 字节流与字符流 在java.io包中操作文件内容的主要有两大类:字节流和字符流,两类都分为输入和输出操作.在字节流中输出数据主要是使用OutputStream完成,输入

Java流对象:InputStream、OutputStream、Reader、Writer

流对象使用完一般要用close方法关闭.释放资源. InputStream 和OutPutStream 二者都是字节输入和输出的抽象父类,子字节为单位处理数据,每次读取.写入一个字节,适合处理二进制文件,如:音频.视频.图片等. Redaer和writer是字符输入输出的抽象父类,以字符为单位处理数据,每次读取或写入一个字符,适合处理文本文件,实现类有FileReader和FileWriter. 附:Java代码实现图片文件的拷贝: package com.buaa.comparable; im

java IO(二):字节流(InputStream和OutputStream)

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

InputStream和outputStream

java.io包中提供了很丰富的输入.输出流对象,如: 基于字节流的stream: DataOutputStream----DataInputStream: FileOutputStream-----FileInputStream: .............等,可以用InputStream和OutputStream从JDK文档查阅 基于字符流的stream(典型的以write和reader来标识的): FileWriter---FileReader: StringWriter---String