JAVA之IO技术自定义装饰类MybufferedReader

package ioTest.io2;

import java.io.FileReader;
import java.io.IOException;

/*
 * 自定义的BufferedReader类
 * MyBufferedReaderDemo:也是为了提高对流的操作性能。
 * 所以构造函数中应该将流传入
 *
 * --------拓展:装饰设计模式
 * 装饰设计模式是28种设计模式之一.目的是为了增强功能.
 * 将被增强的类A->增强类B
 * 将A的对象做为参数,传递给B,让B类对A类进行增强。这就是装饰类的基本原理。
 * 具体操作时这样,构造函数B(A a)
 * 这样B类就成了A类的增强类。
 *
 * 显然之前我们学习的BufferedReader,BufferedWriter也同样是增强类。
 * BufferedWriter(Writer out)
          创建一个使用默认大小输出缓冲区的缓冲字符输出流。
 * 因为此类把Writer的对象做为参数,传递给了构造函数。但同时BufferedWriter
 * 又是Writer的子类。
 *
 * 那么装饰和继承的区别是什么呢?---将在下一个实例中进行分析哦。
 *
 *
 */
public class MyBufferedReaderDemo {
	//为了更易扩展,可以写成下面这样。
	//就是传递最顶层的父类对象作为参数 Reader r
	private FileReader r;
	MyBufferedReaderDemo(FileReader r)
	{
		this.r=r;
	}
	StringBuilder sBuilder=null;
	int ch=0;
	public String MyReadLine() throws IOException {
		while((ch=r.read())!=-1)
		{
			//如何判断读取了一行,对行终止符的处理
			if(ch==‘\r‘)
				continue;
			if(ch==‘\n‘)
				return sBuilder.toString();
			else
				sBuilder.append((char)ch);
		}
		//上面的操作还存在一点小问题,就是如果读到最后一行没有回车,也就是说没有\n
		//这时候,只做上面的操作,会丢失掉最后一行数据。所以这时候添加以个判断就OK
		if(sBuilder.length()>0)
			return sBuilder.toString();
		return null;
	}
	public void Myclose() throws IOException
	{
		r.close();
	}
}
//在设计模式栏目下可以找到装饰设计模式的文章哦

JAVA之IO技术自定义装饰类MybufferedReader

时间: 2024-10-22 03:17:35

JAVA之IO技术自定义装饰类MybufferedReader的相关文章

JAVA之IO技术-自定义的LineNumberReader类

package ioTest.io2; /* * 自定义一个带有读取行号方法的读取文件的装饰类 */ import java.io.FileReader; import java.io.IOException; import java.io.Reader; public class MyLineNumberReaderDemo { public static void main(String[] args) throws IOException { String line; //创建输入流-读取

JAVA之IO技术相关Properties类 存储配置文件信息

package ioTest.io3; /* * Properties存储配置文件信息 * 1.文件信息--------------------------- * 2.根据文件信息获取key和value---|流| * 3.将key,value的之对应存储到properties对象中 */ import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOu

JAVA之IO技术相关Properties类的使用

package ioTest.io3; /*Properties是hashtable的子类. * 也就是说它具备map集合的特点,而且它里面存储的键值对都是字符串 * 是集合中和io技术结合的一个容器 * * 该对象的特点是可以用于键值对形式的配置文件 */ import java.util.Properties; public class PropertiesDemo { public static void main(String[] args) { // TODO Auto-generat

JAVA之IO技术File类的使用

package ioTest.io3; /* * File类是对文件和文件夹的抽象. * File类的常见方法: * 1.创建 * createNewFile():在指定的位置创建文件,如果该文件已经存在,则不创建,返回false. * 和输出流对象不一样,输出流对象,只要已建立就创建,如果文件存在,则覆盖. * mkdir():创建此抽象路径名指定的目录 * mkdir():创建此抽象路径名指定的目录,包括所有必需但不存在的父目录. * 2.删除 * delete() * deleteOnEx

JAVA之IO技术-字符流对象Writer的子类对象FileWriter的使用

  package ioTest.io1; import java.io.File; import java.io.FileWriter; /* * IO技术,按照操作数据的方式分类如下: * 字节流和字符流 * 字节流的两个基类: * InputStream,OutputStream * 字节流的两个基类: * Reader,Writer * 思考一个问题:为什么有了字节流还要出现字符流? * * 先学习字符流的特点. * * 既然IO是操作数据的,那么数据最常见的体现形式 文件 * 需求:

JAVA之IO技术文件的复制原理。

在Swing 中显示文本或提示信息的方法是使用标签,它支持文本字符串和图标.在应用程序的用户界面中,一个简短的文本标签可以使用户知道这些控件的目的,所以标签在Swing中是比较常用的控件. 1.标签的使用 标签由JLabel类定义,父类为JComponent类. 标签可以显示一行只读文本,一个图像或带图像的文本,它并不能产生任何类型的事件,只是简单低显示文本和图片,但是可以使用标签的特性指定标签上文本的对齐方式. JLabel类提供了多种构造方法,这样可以创建多种标签,例如显示只有文本的标签.只

JAVA之IO技术转换流方式优化键盘录入InputStreamReader,OutputStreamReader

package ioTest.io2; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; /* * 在Readin这个类(读取键盘录入的最基础的方法类)的末尾,我们提出了一个

JAVA之IO技术BufferedReader,BufferedWriter的缓冲区技术的使用和原理

BufferedReader: package ioTest.io2; /* * BufferedReader:该缓冲区提供了一个一次读一行的方法 * readline(); * * 加入缓冲区技术的优点是什么呢? * 原来我是读一个字符取一个字符,现在变成我读一行字符,将其放在数组中,然后再取. * 这样是不是提高了效率.实际上BufferedReader类底层实现的原理,就是利用了数组. */ import java.io.BufferedReader; import java.io.Fil

java中IO写文件工具类

下面是一些根据常用java类进行组装的对文件进行操作的类,平时,我更喜欢使用Jodd.io中提供的一些对文件的操作类,里面的方法写的简单易懂. 其中jodd中提供的JavaUtil类中提供的方法足够我们使用,里面的方法写的非常简练,例如append,read等方法,封装更好,更符合面向对象, 这里面我写的一些方法可多都是模仿jodd,从里面进行抽取出来的. /** * 获取路径文件夹下的所有文件 * @param path * @return */ public static File[] ge