`

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);
		}
	}
}

 

分享到:
评论

相关推荐

    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 ...

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

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

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

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

    java_IO.rar

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

    org.apache.commons.io 包

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

    Java-Io流,练习

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

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

    它还包括字符编码处理、流的缓冲和过滤、对象序列化、网络通信等。理解并熟练运用这些知识,能够帮助开发者更好地处理数据输入和输出,提高程序的效率和灵活性。在实际项目中,选择合适的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中的字符流以及如何进行文件...

    Java io输入输出流及字符集

    Java的IO流系统提供了丰富的功能,包括各种类型的流、缓冲、字符集转换、对象序列化等。理解并熟练运用这些概念,可以帮助开发者高效地处理数据输入输出,无论是文件操作还是网络通信,都能得心应手。通过阅读《IO...

    java的io操作源代码

    在Java中,IO操作基于流(Stream)的概念,流是数据传输的通道,分为字节流和字符流两大类。字节流处理单个字节的数据,如InputStream和OutputStream;字符流处理Unicode字符,如Reader和Writer。它们又分别分为输入...

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

    本教程将详细介绍Java IO中的字节流、字符流、缓冲流以及转换流,并通过IODemo实例来展示它们的用法。 ### 1. 字节流 字节流是Java中最基础的流类型,用于处理以字节为单位的数据。字节流分为输入流(InputStream...

    Java IO 字节流 字符流

    此外,Java还提供了一些缓冲流,如BufferedInputStream、BufferedOutputStream、BufferedReader和BufferedWriter,它们提高了读写性能,通过内部缓冲区批量处理数据。这些缓冲流可以在字节流和字符流上进行包装,...

    javaIo操作的基础代码

    在Java中,IO操作涉及到文件、字节流、字符流以及管道流等多个概念。下面将详细解释这些知识点。 首先,我们来看“文件类”。在Java中,`java.io.File`类用于表示文件和目录路径名的抽象表示。它提供了创建、删除、...

Global site tag (gtag.js) - Google Analytics