`
modabobo
  • 浏览: 510141 次
文章分类
社区版块
存档分类
最新评论

Java.过滤流(包装流)

 
阅读更多

包装类的概念与作用
各种字节节点流类,它们都只具有读写字节内容的方法,以FileInputStream与FileOutputStream为例,它们只能在文件中读取或者向文件中写入字节,在实际应用中我们往往需要在文件中读取或者写入各种类型的数据,就必须先将其他类型的数据转换成字节数组后写入文件,或者从文件中读取到的字节数组转换成其他数据类型,很麻烦的!!通过FileOutputStream将一个浮点小数写入到文件中和将一个整数写入到文件时很困难的。
这时就需要包装类DataOutputStream。它提供了往各种输出流对象中写入各种类型的数据的方法。 传递一个FileOutputStream输出流对象给DataOutputStream实例对象和调用DataOutputStream实例对象的用于写入浮点小数的方法。

DataOutputStream并没有对应到任何具体的流设备,一定要给它传递一个对应具体流设备的输出流对象,完成类似DataOutputStream功能的类就是一个包装类,也叫过滤流类或处理流类。它对OutputStream流类进行了包装,使编程人员使用起来更方便。

DataOutputStream包装类的构造函数语法:public DataOutputStream(OutputStream out)

包装类也可以包装另外一个包装类

DataOutputStream的部分方法列表:
public final void writeBoolean(boolean v)
public final void writeShort(int v)
public final void writeChar(int v)
public final void writeint(int v)
public final void writeLong(long v)
public final void writeFloat(float v)
public final void writeDouble(double v)
public final void writeBytes(String s)


BufferedInputStream与BufferedOutputStream类
对IO进行缓冲是一种常见的性能优化方式
缓冲流为I/o流增加了内存缓冲区,增加缓冲区有两个基本目的:允许Java程序一次不只操作一个字节,这样提高了程序的性能。
由于有了缓冲区,使得在流上执行skip、mark、和reset方法都成为可能。

BufferedInputStream和BufferedOutputStream是Java提供的两个缓冲区包装类,不管地成系统是否使用了缓冲区,这两个类在自己的实例对象中创建缓冲区。这种缓冲区与底层系统提供的缓冲区是有区别的。底层系统提供的缓冲区直接与目标设备交换数据。包装类创建的缓冲区需要调用包装类所包装的那个输出流对象将这个缓冲区的数据写入到底层设备或底层缓冲区中。底层缓冲区就是一次向底层设备写入或者读取大量数据。而包装类缓冲区实现一次读取一行的作用

BufferedInputStream的两个构造函数
BufferedInputStream(InputStream in)创建具有32个字节的缓冲区的缓冲流
BufferedInputStream(InputStream in,int size)按size的大小来创建缓冲区

BufferedOutStream类的两个构造函数:
BufferedOutputStream(OutStream out)
BufferedOutputStream(OutputStream out,ont size)

BufferedReader和BufferedWriter类
BufferedReader的readLine方法可以一次读取一行文本,BufferedWriter的newLine方法可以向字符流中写入不同操作系统下的换行符
-------------------
DataInputStream与DataOutputStream类
提供了从I/O流中读写各种基本数据类型数据的各种方法

DataOutputStream类提供了三个写入字符串的方法:
public final void writeBytes(String s)由于Java中的字符编码是Unicode的,每个字符占用两个字节,writeBytes方法只是将每个字符的低字节写入到目标设备中
public final void writeChars(String s)将每个字符中的两个字节都写入到目标设备中
public final void writeUTF(String s)将字符串按UTF编码方式写入到目标设备中,在写入的数据中是带有长度头的

关闭流栈中的最上层的流对象,将会自动关闭流栈中的所有底层流对象


PrintStream类提供了一系列的print和println方法,可以将基本数据类型的数据格式化成字符串输出。格式化输出就是将一个数据按照字符串的格式输出。例如,97被格式化输出的实际字节数据为0x39和0x37

PrintStream的3个构造函数:
PrintStream(OutputStream out)
PrintStream(OutputStream out,boolean autoflush)
PrintStream(OutputStream out,boolean autoflush,String encoding)

与PrintStream对应的PrintWriter类,即使遇到了文本换行标识符(/n),PrintWriter类也不会自动清空缓冲区

PrintWriter的println方法能根据操作系统的不同而生成相应的文本换行标识符。在Windows下的文本换行标识符是“/r/n”,而Linux下的文本换行标识符是“/n”。

ObjectInputStream和ObjectOutputStream这两个包装类,用于从底层输入流中读取对象性的数据和将对象类型的数据写入到底层输出流
ObjectInputStream与ObjectOutputStream类所读写的对象必须实现了Serializable接口。对象中的transient和static类型的成员变量不会被读取和写入。

一个可以被序列化的MyClass类的定义:
public class MyClass implements Serializable{
public transient Thread t;
private String customerID;
private int total;
}

示例代码:创建一个可序列化的学生对象,并用ObjectOutputStream类把它存储到一个文件(mytext.txt)中,然后再用ObjectInputStream类把存储的数据读取到一个学生对象中,即恢复保存的学生对象。


字节流与字符流的转换
InputStreamReader和OutputStreamWriter,是用于将字节流转换成字符流来读写的两个类,InputStreamReader可以将一个字节流中的字节解码成字符后读取,OutputStreamWriter将字符编码成字节后写入到一个字节流中
InputStreamReader的两个主要的构造函数:
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,String CharsetName)

OutputStreamWriter的两个主要的构造函数:
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out,String CharsetName)

避免频繁地在字符与字节之间进行转换,最好不要直接使用InputStreamReader和OutputStreamWriter类来读写数据,应尽量使用BufferedWriter类包装OutputStreamWriter类,用BufferedReader类包装InputStreamReader

FileReader

分享到:
评论

相关推荐

    Java基础知识点总结.docx

    基本数据类型对象包装类★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 < java.util > Collection接口 77 < java.util >Iterator接口 78 < java.util >List接口 78 < java.util >Set接口 80 < java....

    JAVA程序设计教程

    Java程序.............................................................................................6 1.3.1 Java程序的结构 ...........................................................................

    Java开发技术大全(500个源代码).

    MySequenceIn.java 顺序输入流示例 ObjectFileTest.java 序列化对象示例 ReadAndWrite.java 读入和写出数据 ReadAndWriteFile.java 读入数据写出到文件 Student.java 定义一个用来序列化的类 ThreadIn.java ...

    Java2核心技术.part5

    12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串...

    张孝祥Java就业培训教程.pdf

    7.4 过滤流与包装类 7.5 IO中的高级应用 第8章 图形用户界面GUI(一) 8.1 初识AWT 8.2 AWT线程 8.3 AWT事件处理 8.4 GUI组件上的图形操作 第9章 图形用户界面GUI(二) 9.1 常用AWT组件 9.2 布局管理器 9.3 Swing 第10...

    java Socket实现聊天程序

    当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会...

    Java聊天室程序源码(毕业设计)

    当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会...

    java培训机构内部预习文档

    chp1.语言基础 基本语法、标识符、命名规范、八种基本类型、...chp14.I/O框架 File类、流的分类、基本字节流、基本字符流、字节过滤流、字符过滤流、桥转换、对象序列化 chp15.反射 类对象及其获取方式,反射常用方法

    Java聊天室程序.rar

    当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会...

    Java2核心技术.part3

    12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串...

    Java2核心技术.part1

    12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和...

    Java2核心技术.part6

    12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串...

    Java2核心技术.part4

    12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串...

    Java2核心技术.part2

    12.2.1流过滤器的分层 12.2.2数据流 12.2.3随机存取文件流 12.2.4文本流 12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串...

    基于Java Swing实现客户端服务端聊天室程序

    当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会...

    疯狂JAVA讲义

    6.1 基本数据类型的包装类 167 6.2 处理对象 170 6.2.1 打印对象和toString方法 170 6.2.2 ==和equals比较运算符 172 6.3 类成员 175 6.3.1 理解类成员 175 6.3.2 单例(Singleton)类 176 6.4 final修饰符 ...

    Java聊天室程序(源代码)

    当用户聊天时,将当前用户名、聊天对象、聊天内容、聊天语气和是否私聊进行封装,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端 当用户发送聊天信息时,服务端将会...

    Java经典编程源码基础例程300.zip

    实例013 重定向输出流实现程序日志 17 实例014 自动类型转换与强制类型转换 19 实例015 加密可以这样简单(位运算) 20 实例016 用三元运算符判断奇数和偶数 21 实例017 不用乘法运算符实现2×16 22 实例018 实现两...

Global site tag (gtag.js) - Google Analytics