`

21、java.io.BufferedWriter字符缓冲流

阅读更多

一、BufferedWriter

 

  1. 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 
  2. 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。 
  3. 该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。
  4. 并非所有平台都使用新行符 ('\n') 来终止各行。
  5. 因此调用此方法来终止每个输出行要优于直接写入新行符。 
  6. 通常 Writer 将其输出立即发送到底层字符或字节流。
  7. 除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。
  8. 例如, PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("foo.out")));
  9. 将缓冲 PrintWriter 对文件的输出。如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的

 

public class BufferedWriter extends Writer
{
	//创建一个使用默认大小输出缓冲区的缓冲字符输出流
	public BufferedWriter(Writer out){}

	//创建一个使用给定大小输出缓冲区的新缓冲字符输出流
	public BufferedWriter(Writer out,
                      int sz){}

	//写入一个行分隔符。行分隔符字符串由系统属性 line.separator 定义,并且不一定是单个新行 ('\n') 符
	public void newLine()
             throws IOException{}
}
 

 

二、BufferedReader

 

 

  1. 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 
  2. 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。 
  3. 通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。
  4. 因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。
  5. 例如,BufferedReader in = new BufferedReader(new FileReader("foo.in"));
  6. 将缓冲指定文件的输入。
  7. 如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。 
  8. 通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。

 

public class BufferedReader extends Reader
{
	//创建一个使用默认大小输入缓冲区的缓冲字符输入流8192byte即8kb
	public BufferedReader(Reader in){}

	//创建一个使用指定大小输入缓冲区的缓冲字符输入流
	public BufferedReader(Reader in,
                      int sz){}

	//读取一个文本行。通过下列字符之一即可认为某行已终止:换行 ('\n')、回车 ('\r') 或回车后直接跟着换行
	//返回包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 
	public String readLine()
                throws IOException{}
}
 
三、这里用到了装饰设计模式
 
四、LineNumberReader
 
  1. 跟踪行号的缓冲字符输入流。
  2. 此类定义了方法 setLineNumber(int) 和 getLineNumber(),它们可分别用于设置和获取当前行号。 
  3. 默认情况下,行编号从 0 开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用 setLineNumber(int) 更改行号。
  4. 但要注意的是,setLineNumber(int) 不会实际更改流中的当前位置;它只更改将由 getLineNumber() 返回的值。 
  5. 可认为行在遇到以下符号之一时结束:换行符('\n')、回车符('\r')、回车后紧跟换行符。
public class LineNumberReader extends BufferedReader
{
	//使用默认输入缓冲区的大小创建新的行编号 reader
	public LineNumberReader(Reader in){}

	//创建新的行编号 reader,将字符读入给定大小的缓冲区
	public LineNumberReader(Reader in,
                        int sz){}

	//获得当前行号。
	public int getLineNumber(){}

	//设置当前行号。
	public void setLineNumber(int lineNumber){}
}

 

五、示例

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

public class Test {

	public static void main(String[] args) throws IOException {
		FileReader fr = new FileReader("E:\\f\\eclipse\\artifacts.xml");
		LineNumberReader lnr = new LineNumberReader(fr);
		String line = null;
		int num = 0;
		while((line=lnr.readLine())!=null)
		{
			num = lnr.getLineNumber();
			System.out.println(num+"::"+line);
		}
	}
}

 

分享到:
评论

相关推荐

    Java学习IO流小结--字符流

    为了提高效率,Java提供了带缓冲功能的字符流,即`BufferedReader`和`BufferedWriter`。 - **继承关系**: - `java.io.BufferedReader` → `java.io.Reader` → `java.lang.Object` - `java.io.BufferedWriter` ...

    JBuider第八章:Java.io包.rar

    例如,`BufferedReader` 和 `BufferedWriter` 是过滤流,提供缓冲功能,提高效率。 5. **字符流**: 字符流包括`Reader` 和 `Writer` 类,以及它们的子类。` FileReader` 和 `FileWriter` 用于读写文本文件。`...

    使用JAVA.IO流线程的JAVA课设项目万年历记事本

    - Java.IO流库提供了处理输入和输出数据的类,允许程序读取和写入数据到各种源和目的地,如文件、网络连接、内存缓冲区等。 - **输入流**(InputStream)用于读取数据,而**输出流**(OutputStream)用于写入数据...

    北大青鸟java.io经典例子

    为了提高效率,Java提供了缓冲流,如`BufferedReader`和`BufferedWriter`。它们在底层创建一个缓冲区,减少对硬件的访问次数,从而提升性能。 4. **字符编码**: Java默认使用平台的默认字符编码,但可以使用`...

    java.io的吐血实用例子

    在Java编程语言中,`java.io`包是用于输入/输出(I/O)操作的基础部分,包含了许多类和接口,使得开发者能够处理数据流、字符流、对象序列化、磁盘文件以及网络连接等任务。本篇文章将深入探讨`java.io`包中的关键概念...

    java常用的工具类整理28个

    8. **java.io.BufferedReader**和**java.io.BufferedWriter**:用于读写文本文件时的缓冲操作,提高效率。 9. **java.io.InputStreamReader**和**java.io.OutputStreamWriter**:用于字符流与字节流之间的转换。 ...

    Java简单的文件IO程序

    `FileReader`用于从文件中读取字符流,而`BufferedReader`则提供了一个缓冲区,可以提高读取效率。以下是一个基本的文件读取示例: ```java import java.io.*; public class FileReaderExample { public static ...

    java 字符流 讲解

    字符流包括两大基本类:`java.io.Reader`和`java.io.Writer`。`Reader`类是所有字符输入流的抽象基类,用于读取字符序列。而`Writer`类则是所有字符输出流的抽象基类,用于写出字符序列。这两个类都是抽象类,不能...

    JavaIO实例_字节流_字符流_缓冲流_转换流IODemo

    在Java中,IO流分为两大类:字节流和字符流,每种流又有输入流和输出流之分,分别用于数据的读取和写入。 1. **字节流**: - 字节流处理的是8位的字节数据,是最基本的流类型。Java中的`InputStream`和`...

    Java-IO流.pdf

    此外,字符流如` FileReader`和`FileWriter`用于字符文件的读写,`BufferedReader`和`BufferedWriter`提供了字符缓冲功能,`PrintStream`可以方便地打印数据到输出流。 总的来说,Java的IO流体系结构设计灵活,支持...

    Java语言程序设计完整版资料.ppt

    - 实现类:如 `java.io.FileReader` 和 `java.io.FileWriter` 用于文件读写,`java.io.BufferedReader` 和 `java.io.BufferedWriter` 提供缓冲功能以提升效率。 四、I/O流的层次结构 Java I/O类构成了一个层次结构...

    org.apache.commons.io 包

    8. **输入/输出流包装器**: `BufferedInputStream`, `BufferedOutputStream`, `BufferedReader`, `BufferedWriter` 等类,提供了缓冲机制,提高了I/O操作的性能。 9. **文件属性获取**: `FileAttributeView` 和 `...

    java_IO.rar

    在Java SE中,IO框架提供了丰富的类库,使得开发者能够处理各种类型的数据流,包括文件、网络、内存等。本资源"java_IO.rar"包含了关于Java IO的详细讲解视频,覆盖了从基础到高级的各种主题,有助于深入理解和掌握...

    java io包课件

    在本章中,我们将深入探讨`java.io`包的关键知识点,特别是如何使用`File`类以及各种输入/输出流。 首先,让我们来看一下`File`类。`File`类是`java.io`包的核心组件之一,它可以用来表示文件或目录。通过`File`类...

    Java-Io流,练习

    为了提高IO操作的效率,Java提供了缓冲流,如`BufferedInputStream`和`BufferedOutputStream`,以及`BufferedReader`和`BufferedWriter`。这些类在内部维护了一个缓冲区,可以减少实际的物理I/O次数。 五、转换流...

    Java IO 基础操作(文件读写和移动)

    它还包括字符编码处理、流的缓冲和过滤、对象序列化、网络通信等。理解并熟练运用这些知识,能够帮助开发者更好地处理数据输入和输出,提高程序的效率和灵活性。在实际项目中,选择合适的IO策略和工具,往往能显著...

    Java流的奥秘:字节与字符的交响乐章

    ### Java流的奥秘:字节与字符的交响乐章 #### 第一章:字节流的基石 —— 构建数据的桥梁 在Java编程语言中,字节流是处理二进制数据的基础机制之一。它们以8位字节的形式传输数据,并通过Java标准库中的`java.io...

    IO流 javaio java 流

    - 缓冲字符流(BufferedReader/BufferedWriter):提高读写性能,通过内部缓冲区进行操作。 - 转换流(InputStreamReader/OutputStreamWriter):用于在字节流和字符流之间转换。 3. 处理流: - Filter流:这些...

    java字节流和字符流[借鉴].pdf

    与字节流一样,字符流也有缓冲的概念,可以使用 BufferedReader 和 BufferedWriter 对性能进行优化,减少与底层 I/O 操作的交互次数。 总结: Java 的 IO 流系统是基于流的,提供了对数据的读写操作。字节流适用于...

    javaIO字符流文件写入总结共1页.pdf.zip

    Java IO字符流是Java平台中用于处理文本数据的重要部分,特别是在进行文件读写操作时。字符流处理单个字符,适合处理基于字符编码(如UTF-8、GBK等)的文本文件。本篇将深入探讨Java IO中的字符流以及如何进行文件...

Global site tag (gtag.js) - Google Analytics