问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java输入输出流怎么写,

发布网友 发布时间:2022-05-17 09:40

我来回答

5个回答

热心网友 时间:2022-05-22 02:02

stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:

(1)字节流

表示以字节为单位从stream中读取或往stream中写入信息,即io包中的inputstream类和outputstream类的派生类。通常用来读取二进制数据,如图象和声音。

(2)字符流

以Unicode字符为导向的stream,表示以Unicode字符为单位从stream中读取或往stream中写入信息。

区别:

Reader和Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的字节流,因此不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更何况Java内置的char就是16位的Unicode字符),这样加了Reader和Writer之后,所有的I/O就都支持Unicode了。此外新类库的性能也比旧的好。

但是,Read和Write并不是取代InputStream和OutputStream,有时,你还必须同时使用"基于byte的类"和"基于字符的类"。为此,它还提供了两个"适配器(adapter)"类。InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。

一.流的层次结构

定义:

(1) java将读取数据对象成为输入流,能向其写入的对象叫输出流。结构图如下:输入流:

输出流

二.InputStream类

inputstream类和outputstream类都为抽象类,不能创建对象,可以通过子类来实例化。

InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法.Inputstream类中的常用方法:

(1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。

(2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的

(3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。

(4) public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,

(5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取

(6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.

三.OutputStream类

OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。

1. public void write(byte b[ ]):将参数b中的字节写到输出流。

2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。

3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。

4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。

5. public void close( ) : 关闭输出流并释放与流相关的系统资源。

注意:

1. 上述各方法都有可能引起异常。

2. InputStream和OutputStream都是抽象类,不能创建这种类型的对象。

四.FileInputStream类

FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。使用方法:

方式1:

File fin=new File("d:/abc.txt");

FileInputStream in=new FileInputStream(fin);

方式2:

FileInputStream in=new

FileInputStream("d: /abc.txt");

方式3:

构造函数将 FileDescriptor()对象作为其参数。

FileDescriptor() fd=new FileDescriptor();

FileInputStream f2=new FileInputStream(fd);

五.FileOutputStream类

FileOutputStream类用来处理以文件作为数据输出目的数据流;一个表示文件名的字符串,也可以是File或FileDescriptor对象。

创建一个文件流对象有两种方法:

方式1:

File f=new File("d:/abc.txt");

FileOutputStream out=new FileOutputStream (f);

方式2:

FileOutputStream out=new

FileOutputStream("d:/abc.txt");

方式3:构造函数将 FileDescriptor()对象作为其参数。

FileDescriptor() fd=new FileDescriptor();

FileOutputStream f2=new FileOutputStream(fd);

方式4:构造函数将文件名作为其第一参数,将布尔值作为第二参数。

FileOutputStream f=new FileOutputStream("d:/abc.txt",true);

注意:

(1)文件中写数据时,若文件已经存在,则覆盖存在的文件;(2)的读/写操作结束时,应调用close方法关闭流。

举例:2-1

六.File类

File类与InputStream / OutputStream类同属于一个包,它不允许访问文件内容。

File类主要用于命名文件、查询文件属性和处理文件目录。

举例:2-2

七.从一个流构造另一个流

java的流类提供了结构化方法,如,底层流和高层过滤流。

而高层流不是从输入设备读取,而是从其他流读取。同样高层输出流也不是写入输出设备,而是写入其他流。

使用"分层对象(layered objects)",为单个对象动态地,透明地添加功能的做法,被称为Decorator Pattern。Decorator模式要求所有包覆在原始对象之外的对象,都必须具有与之完全相同的接口。这使得decorator的用法变得非常的透明--无论对象是否被decorate过,传给它的消息总是相同的。这也是Java I/O类库要有"filter(过滤器)"类的原因:抽象的"filter"类是所有decorator的基类。Decorator模式常用于如下的情形:如果用继承来解决各种需求的话,类的数量会多到不切实际的地步。Java的I/O类库需要提供很多功能的组合,于是decorator模式就有了用武之地。

为InputStream和OutputStream定义decorator类接口的类,分别是FilterInputStream和FilterOutputStream。

7.1 FilterInputStream

FilterInputStream的种类



功能

构造函数的参数

用法

DataInputStream

与DataOutputStream配合使用,这样你就能以一种"可携带的方式(portable fashion)"从流里读取primitives了(int,char,long等)

InputStream

包含了一整套读取primitive数据的接口。

BufferedInputStream

用这个类来解决"每次要用数据的时候都要进行物理读取"的问题。你的意思是"用缓冲区。"

InputStream,以及可选的缓冲区的容量

它本身并不提供接口,只是提供一个缓冲区。需要连到一个"有接口的对象(interface object)"。

LineNumberInputStream

跟踪输入流的行号;有getLineNumber( )和setLineNumber(int)方法

InputStream

只是加一个行号,所以还得连一个"有接口的对象"。

PushbackInputStream

有一个"弹压单字节"的缓冲区(has a one byte push-back buffer),这样你就能把最后读到的那个字节再压回去了。

InputStream

主要用于编译器的扫描程序。可能是为支持Java的编译器而设计的。用的机会不多。

FilterOutputStream的种类



功能

构造函数的参数

用法

DataOutputStream

与DataInputStream配合使用,这样你就可以用一种"可携带的方式(portable fashion)"往流里写primitive了(int, char, long,等)

OutputStream

包括写入primitive数据的全套接口。

PrintStream

负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的存储,而PrintStream负责数据的显示。

一个OutputStream以及一个可选的boolean值。这个boolean值表示,要不要清空换行符后面的缓冲区。

应该是OutputStream对象的最终包覆层。用的机会很多。

BufferedOutputStream

用 这个类解决"每次往流里写数据,都要进行物理操作"的问题。也就是说"用缓冲区"。用flush( )清空缓冲区。

OutputStream, 以及一个可选的缓冲区大小

本身并不提供接口,只是加了一个缓冲区。需要链接一个有接口的对象。

DataInputStream类对象可以读取各种类型的数据。

DataOutputStream类对象可以写各种类型的数据;

创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:

FileInputStream in=new FileInputStream("d:/abc.txt");

DataInputStream din=new DataInputStream(in);

7.2BufferInputStream和bufferOutputStream

允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。

BufferInputstream定义了两种构造函数

(1) BufferInputStream b= new BufferInputstream(in);

(2) BufferInputStream b=new BufferInputStream(in,size)

第二个参数表示指定缓冲器的大小。

同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。

7.3printstream

用于写入文本或基本类型

两种构造函数方法:

PrintStream ps=new PrintStream(out);

PrintStream ps=new PrintStream(out, autoflush)

第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流。

八.字符流的读取和写入

java.io.Reader 和 java.io.InputStream 组成了 Java 输入类。Reader 用于读入16位字符,也就是 Unicode 编码的字符;而 InputStream 用于读入 ASCII 字符和二进制数据。

Reader的体系结构

(1) FileReader

FileReader主要用来读取字符文件,使用缺省的字符编码,有三种构造函数:

--将文件名作为字符串

FileReader f=new FileReader(“c:/temp.txt”);

--构造函数将File对象作为其参数。

File f=new file(“c:/temp.txt”);

FileReader f1=new FileReader(f);

--构造函数将FileDescriptor对象作为参数

FileDescriptor() fd=new FileDescriptor()

FileReader f2=new FileReader(fd);

(2) charArrayReader

将字符数组作为输入流,构造函数为:

public CharArrayReader(char[] ch);

(3) StringReader

读取字符串,构造函数如下:

public StringReader(String s);

(4) InputStreamReader

从输入流读取字节,在将它们转换成字符。

Public inputstreamReader(inputstream is);

(5) FilterReader

允许过滤字符流

protected filterReader(Reader r);

(6) BufferReader

接受Reader对象作为参数,并对其添加字符缓冲器,使用readline()方法可以读取一行。

Public BufferReader(Reader r);

Writer类体系结构

(1) FileWrite

将字符类型数据写入文件,使用缺省字符编码和缓冲器大小。

Public FileWrite(file f);

(2)chararrayWrite()

将字符缓冲器用作输出。

Public CharArrayWrite();

(3) PrintWrite

生成格式化输出

public PrintWriter(outputstream os);

(4) filterWriter

用于写入过滤字符流

protected FilterWriter(Writer w);

FilterOutputStream的种类



功能

构造函数的参数

用法

DataOutputStream

与DataInputStream配合使用,这样你就可以用一种"可携带的方式(portable fashion)"往流里写primitive了(int, char, long,等)

OutputStream

包括写入primitive数据的全套接口。

PrintStream

负责生成带格式的输出(formatted output)。DataOutputStrem负责数据的存储,而PrintStream负责数据的显示。

一个OutputStream以及一个可选的boolean值。这个boolean值表示,要不要清空换行符后面的缓冲区。

应该是OutputStream对象的最终包覆层。用的机会很多。

BufferedOutputStream

用 这个类解决"每次往流里写数据,都要进行物理操作"的问题。也就是说"用缓冲区"。用flush( )清空缓冲区。

OutputStream, 以及一个可选的缓冲区大小

本身并不提供接口,只是加了一个缓冲区。需要链接一个有接口的对象。

DataInputStream类对象可以读取各种类型的数据。

DataOutputStream类对象可以写各种类型的数据;

创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:

FileInputStream in=new FileInputStream("d:/abc.txt");

DataInputStream din=new DataInputStream(in);

7.2BufferInputStream和bufferOutputStream

允许程序在不降低系统性能的情况下一次一个字节的从流中读取数据。

BufferInputstream定义了两种构造函数

(1) BufferInputStream b= new BufferInputstream(in);

(2) BufferInputStream b=new BufferInputStream(in,size)

第二个参数表示指定缓冲器的大小。

同样BufferOutputStream也有两种构造函数。一次一个字节的向流中写数据。

7.3printstream

用于写入文本或基本类型

两种构造函数方法:

PrintStream ps=new PrintStream(out);

PrintStream ps=new PrintStream(out, autoflush)

第二个参数为布尔值,控制每次输出换行符时java是否刷新输出流

热心网友 时间:2022-05-22 03:20

Java IO的一般使用原则:

-------------------------------------------------------------------
一、按数据来源(去向)分类:

1、是文件: FileInputStream, FileOutputStream, FileReader, FileWriter

2、是byte[]:ByteArrayInputStream, ByteArrayOutputStream

3、是Char[]: CharArrayReader, CharArrayWriter

4、是String: StringBufferInputStream, StringReader, StringWriter

5、网络数据流:InputStream, OutputStream, Reader, Writer

-------------------------------------------------------------------
二、按是否格式化输出分:

1、要格式化输出:PrintStream, PrintWriter

-------------------------------------------------------------------
三、按是否要缓冲分:

1、要缓冲:BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter

-------------------------------------------------------------------
四、按数据格式分:

1、二进制格式(只要不能确定是纯文本的): InputStream, OutputStream及其所有带Stream结束的子类

2、纯文本格式(含纯英文与汉字或其他编码方式);Reader, Writer及其所有带Reader, Writer的子类

-------------------------------------------------------------------
五、按输入输出分:

1、输入:Reader, InputStream类型的子类

2、输出:Writer, OutputStream类型的子类

-------------------------------------------------------------------
六、特殊需要:

1、从Stream到Reader,Writer的转换类:InputStreamReader, OutputStreamWriter

2、对象输入输出:ObjectInputStream, ObjectOutputStream

3、进程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter

4、合并输入:SequenceInputStream

5、更特殊的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader

-------------------------------------------------------------------
决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):

第一,考虑最原始的数据格式是什么:是否为文本?

第二,是输入还是输出?

第三,是否需要转换流:InputStreamReader, OutputStreamWriter?

第四,数据来源(去向)是什么:文件?内存?网络?

第五,是否要缓冲:bufferedReader (特别注明:一定要注意的是readLine()是否有定义,有什么比read, write更特殊的输入或输出方法)

第六,是否要格式化输出:print?

参考资料:http://hi.baidu.com/liubeionline/blog/item/123d2eed4cc2b43726979193.html

热心网友 时间:2022-05-22 04:54

InputStream:输入流
OuputStream:输出流
他们俩都是抽象类。仅实现了某些基础功能方法。如何写在这里一句两句说不清的,推荐你看看《核心技术》中的javaio流章节。

热心网友 时间:2022-05-22 06:46

import java.io.*;// 可以认为是输入输出流的头
x.flush();//清空缓冲区使输出流写出
x.close(); // 关闭流

热心网友 时间:2022-05-22 08:54

这个简单,主要就是几个类,本人专业就是JAVA编程,把手教你邮件联系
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
你好。本人最近想入手个 本本 知道你是高手望给点高见 3K以内。 惠普(hp)hp431(qg643pa) 与联想(lenovo)g460al-ith(h)该买哪一... 惠普4核1G独立显卡2G-4G内存的笔记本电脑有哪些型号的比较好?价位是多... hp 431-qg597怎么样?惠普质量真很差吗?它的商务本怎么样 hp431 qg597无线上网卡插在那里? 惠普HP431(QG643PA)笔记本经常死机自动重启 陆金所 德众金融理财可靠吗? 平安为什么建陆金所 陆金所有什么风险吗 100分问题:请问汕头市区哪里有卖“节节风”的中草要。 三星堆到现在都无人破解是为什么? 三星堆太阳鸟是哪个时期的??? 二号青铜神树上的太阳鸟尺寸多大 怎样在微信里关注天津禁毒和中国禁毒? 字符输出函数输出格式 java的输入输出流应该怎么写? 如何用C++输出字符串 C++中的几种字符串输入输出方法 java IO输入输出流中的各种字节流,字符流类,我需要都记住吗,还是只要记 ... 惠普cq40的高压条在笔记本电脑的那个位置? 笔记本高压条需要驱动板多少V供电, 笔记本换了高压条后无法调节亮度! 笔记本维修 高压条 笔记本的高压条怎么改为通用的高压条? 惠普CQ40笔记本电脑的高压条在哪个位置?笔记本显示器不亮,说是高压条坏了,拆开后却发现不知道上哪 笔记本高压条接口5条线,VCC,GND,EN,ADJ,还有一根是什么定义呀? 笔记本高压条损坏屏幕什么症状 笔记本电脑显示器高压条坏了会出现什么情况 笔记本显示屏什么情况下需要更换高压条 什么是笔记本高压条? 三星堆发现青铜器,为何这么发达的青铜文明周边却没有一个国家记载过它们? cpu50多度正常吗 新电脑CPU温度50多正常吗 wps表格数字下拉不会自动增加了怎样办按住ctrl键也不行了 讷河市身份证尾号293是哪个镇? 冰箱冷冻总是结冰是什么问题 身份证好吗为405302的是什么地方人? 身份证上28指的是哪一个区 请问这个excel函数是什么意思,帮我讲讲,谢谢 邮政储蓄银行卡扣了293块是什么钱? 欠支付宝备用金293,支付宝会给居住地发函吗? 如何通过JS获取用户本地图片路径 提交完护照申请怎么查办没办下来 车牌号293TW怎么样? 车牌号293Z9怎么样 苹果7美版国行可以用电信卡么?网上2800就行了,是真的么? 面值100000的外国钱币,有一个留胡子的老头背面是房子 谁知道这个老人是谁?有没他的其他照片? 求助,LoL能开超高特效的笔记本电脑至少需要什么样的配置? 我这个配置玩LOL能开中高画质吗?