简单使用输入/输出流

一、输出流

输出流有两套类结构:一是以 OutputStream 为基类的基于字节流的类,一是以 write 为基类的基于字符流的类。

1、OutputStream

OutputStream 类包括的类的主要功能是决定了输出到哪里,比如 将输出发送给一个文件(派生类FileOutputStream),还是发送给管道(派生类PipedOutputStream)等。

2、装饰类

装饰类的概念,就是在原有的基础上,要添加一种功能可以通过添加一个装饰来实现。与继承机制相比,装饰类是动态的,可以在运行时添加或者去除附加的功能,具有更大的灵活性。FilterOutputStream 就是装饰类的一个基类,它将属性或者有用的接口同输出流连接起来,为其他OutputStream 类(如 DateOutputStream\BufferOutputStream)提供了有用的功能。

DateOutputStream
与 DateInputStream 配合使用,以便采用“与平台无关”的形式,将原始数据类型写入一个数据流。如readBoolean(),readUTF(),readChar,readByte(),readDouble()等。所有的读取方法都是共享一个位置指示器的,即在前面的read方法执行后,后面再执行其他read方法都是从上一个read方法读取到的位置开始向后读取的。如开始执行了1次readByte()后面的readChar()是从第2个字节开始读的。

BufferedOutputStream
用该装饰类来实现把数据先放到缓冲区,避免每次发出很少的数据都要进行物理性的写入。通过调用flush(),对缓冲区进行刷新,即可完成物理性的写入。注意,flush()方法是清除缓冲区,强制之前被缓冲还没有写入流的字节会立即写入流。

如利用socket实现通信的时候
try {
            dis=new DataInputStream(new BufferedInputStream(socket.getInputStream()));
            dos=new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
        } catch (IOException e) {
            e.printStackTrace();
        }

3、write 类

write 类主要是在面向 Unicode 的、以字符为基础的 I/O 操作时使用。write 类是一个抽象类,并不是真正的数据流,但是它为用户提供了如如字符流一样写入二进制的方法。
Reader 类的子类:
BufferdWrite:    将文本写入到输出流中,同时对写入的字符提供缓冲
PipedWrite:    向PipedReader写入字符
PrintWrite:    写格式化字符(将二进制数格式化为字符并将它写入数据流)
StringWrite:    向字符串写入字符
FilterWrite:    写过滤后的流
OutputStreamWrite:写字符流
CharArrayWrite:    向字符数组写入字符

二、输入流

同输出流一样,输入流也分为 InpututStream 和 Reader,前者基于字节流,后者基于字符流。

1、InputStream

InputStream 是通过调用read方法从流中读取数据。通过调用close方法关闭InputStream,关闭输入流之后再试图调用它就会产生异常。

2、Reader 类

Reader 类用于对字符流的读取处理。
Reader 类的子类对应于 Reader 类。其中 InputStreamReader 能将二进制流转化为字符流。
例如,从网络上读取数据
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
其中getInputStream()方法返回socket类字节流,在通过InputStreamReader将其转化为字符流并通过BufferedReader对其封装,之后就可以使用BufferedReader提供的方法readLine一行一行地读入字符串。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值