黑马程序员——IO流-字符流&装饰设计模式
来源:互联网 发布:联通和电信光纤端口 编辑:程序博客网 时间:2024/05/29 04:48
------- android培训、java培训、期待与您交流! ----------
字符流
1. 什么是字符流
字符流是专门用来操作字符数据的,读取字符数据会自动解码和编码
2. 所有字符输入流都是Reader的子类,所有字符输出流都是Writer的子类
3. 字符流和字节流的方法几乎一致,只不过一个操作的是字符数据,一个操作的是字节数据,方法参见字节流
InputStreamReader类和OutputStreamWriter类
1. InputStreamReader可以把InputStream转换为字符流,从而读到字符
2. OutputStreamWriter将OutputStream转换为字符流,从而写出字符
3. 在读写字符时,字符流可以自动编码和解码
4. 如果不指定字符流的码表,用的是默认的码表,中文简体操作系统默认的码表是GBK,可以通过InputStreamReader和OutputStreamWriter的构造方法指定输入和输出的码表
5. 字符流细节
读取文件字节-------à转成字符-------à读入程序
程序写出字符-------à转为字节-------à写到文件
代码示例(拷贝字符文件)
import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;public class Demo1 {public static void main(String[] args) throws IOException {// 自动关闭流try (// 创建一个读入字符的对象, 将字节流数据转换为字符流InputStreamReader isr = new InputStreamReader(new FileInputStream("test.txt"));// 创建一个写出字符的对象, 将字符流数据转换为字节流OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("test_copy.txt"));) {int x; // 用来存储读取的单个字符// 循环将每一个字符拷贝while ((x = isr.read()) != -1) {// 将读出的每个字符写进目标对象osw.write(x);}}}}
FileReader类和FileWriter类
1. 这两个类简化了InputStreamReader类和OutputStreamWriter类,但是不能指定字符流码表
例如: FileReader fr = new FileReader(“test.txt”)就相当于
InputStreamReader isr = new InputStreamReader(newFileInputStream(“test.txt”));
代码示例(拷贝字符文件)
import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class Demo2 {public static void main(String[] args) throws IOException {try (// 创建读入和写出的字符流对象FileReader fr = new FileReader("test.txt");FileWriter fw = new FileWriter("test_copy2.txt");) {int x; // 用来保存单个字符数据// 循环将每个字符拷贝到目标文件while ((x = fr.read()) != -1) {fw.write(x);}}}}
BufferedReader类和BufferedWriter类
1. 这两个类跟字节流的BufferedInputStream和BufferedOutputStream类很相似,一次读写最写8192个字符存入缓冲区,这样读写的效率比较高
2. 特有方法
BufferedReader中的rederLine()方法一次会读取一行字符数据,不包含换行返回String类型
BufferedWriter中的newLine()方法用于在写出数据时换行
代码示例
import java.io.*;public class Demo3 {public static void main(String[] args) throws FileNotFoundException,IOException {try (// 创建输入流字符缓冲区对象BufferedReader br = new BufferedReader(new FileReader("test.txt"));// 创建输出流字符缓冲区, 将字符编码转换为utf-8输出BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("test_copy3.txt"), "utf-8"));) {String s; // 用来存储一行的字符数据// 循环将字符文件拷贝到目标文件while ((s = br.readLine()) != null) {// 写出读入的一行数据bw.write(s);// 写出换行bw.newLine();}}}}
LineNunberReader类
1. 这个类能够读出当前字符流的行号,是BufferedReader的子类,这个类重写了父类的readLine()方法,用于读出行号
代码示例
import java.io.*;public class Demo5 {public static void main(String[] args) throws FileNotFoundException,IOException {try (// 创建一个字符输入和输出流对象LineNumberReader br = new LineNumberReader(new FileReader("test.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("test_copy5.txt"))) {// 拷贝字符文件String s;while ((s = br.readLine()) != null) {bw.write(br.getLineNumber() + " " + s);bw.newLine();}}}}
如何选择字符输入流对象
1. 只是需要默认码表用FIleReader和FileWriter
2. 使用非默认码表用InputStreamReader和OutputStreamWriter
3. 要效率高或读取一行用BufferedReader和BufferedWriter
装饰设计模式
1. 将一个类进行包装,实现更多的功能
2. 装饰设计模式的写法
1) 通过构造函数接收一个被包装对象
2)用成员变量引用
3)具有和被包装对象相同的方法
4)调用原对象的方法,进行功能增强
5)实现和被包装对象相同的接口,可以和被包装对象一样使用,但功能已经增强了
代码示例
package com.itcast.rw;public class DecoratorMode {public static void main(String[] args) {// 创建一个包装类的对象将要被包装的对象当做参数传入ItcastStudent is = new ItcastStudent(new Student());// 调用包装类的code方法is.code(); // 这个方法多了两个功能}}// 定义一个接口interface Coder {void code();}// 定义学生类实现Coder接口class Student implements Coder {/* * 实现接口中的方法 学生有的功能是会JavaSE和Java Web */public void code() {System.out.println("JavaSE");System.out.println("Java Web");}}// 定义装饰类实现Coder接口class ItcastStudent implements Coder {// 这个类有一个Coder类型的成员属性Coder coder;/* * 这个类的构造方法接收一个Student对象 */ItcastStudent(Coder coder) {this.coder = coder;}/* * 重写接口中的方法对传入构造方法的对象的功能进行扩展 */public void code() {this.coder.code();System.out.println("SSH");System.out.println("Hadop");}}
- 黑马程序员——IO流-字符流&装饰设计模式
- 黑马程序员——装饰设计模式(io流)
- 黑马程序员 io中的缓冲字符流,装饰设计模式(毕向东)
- 黑马程序员_温习 IO流一 (个人笔记) 简要(IO介绍。。字符流。。字符流缓冲区..装饰设计模式)
- 黑马程序员——>第十九天<io流(BufferedWriter-装饰设计模式-流操作规律)>
- 47.黑马程序员-IO流缓冲区、装饰设计模式
- 黑马程序员——21,字符流FileReader,FileWriter,BufferedWriter,BufferedReader,装饰设计模式,LineNumberReader
- 黑马程序员——Java基础——IO流、字符流、字节流、缓冲区技术、装饰设计模式、LineNumberReader等
- 黑马程序员——IO流——IO体系、装饰设计模式、流对象的选择
- 黑马程序员_java的IO流(对第十九课字符缓冲区及装饰设计模式的总结)
- 黑马程序员_IO流——装饰设计模式
- 黑马程序员——IO流(字符流、包装设计模式)
- 黑马程序员_IO流-装饰设计模式
- 黑马程序员—— 装饰设计模式
- 黑马程序员 —— 装饰设计模式
- 黑马程序员——装饰设计模式
- 黑马程序员——IO字符流
- 黑马程序员 java学习笔记3-IO流之字节流与装饰设计模式
- HandlerThread类和IntentService类的基本原理
- Eclipse各种图标的含义
- 15、SQL Server 使用子查询和CTE提供数据之关系除
- 内存映射函数mmap的初步理解
- Reclaimable Storage -- 可回收表空间
- 黑马程序员——IO流-字符流&装饰设计模式
- HDU-2048神、上帝以及老天爷
- oracle学习之存储过程(1)语法
- git设置命令别名
- python操作mysql方法和常见问题
- Canny边缘检测算法原理及其VC实现详解(二)
- mybatis类和xml
- iOS学习笔记26—iPhone开发常识集锦
- winfrom实现闹钟