`

Writer 源码分析

阅读更多
Writer是写入字符流的抽象类。子类必须实现的方法有 write(char[], int, int)、flush() 和 close()。

public abstract class Writer implements Appendable, Closeable, Flushable {
	// 字符缓冲区
	private char[] writeBuffer;

	// 缓冲区大小
	private final int writeBufferSize = 1024;

	// 锁对象
	protected Object lock;

	// 默认构造函数,指定锁对象为流本身
	protected Writer() {
		this.lock = this;
	}

	// 使用提供的锁对象来同步重要操作
	protected Writer(Object lock) {
		if (lock == null) {
			throw new NullPointerException();
		}
		this.lock = lock;
	}

	// 写入单个字符。c的低16位会被写入,高16位被忽略。
	public void write(int c) throws IOException {
		synchronized (lock) {
			if (writeBuffer == null){
				writeBuffer = new char[writeBufferSize];
			}
			writeBuffer[0] = (char) c;
			write(writeBuffer, 0, 1);
		}
	}

	// 写入字符数组
	public void write(char cbuf[]) throws IOException {
		write(cbuf, 0, cbuf.length);
	}

	// 抽象方法,由子类来实现
	abstract public void write(char cbuf[], int off, int len) throws IOException;

	// 写入字符串
	public void write(String str) throws IOException {
		write(str, 0, str.length());
	}

	// 写入字符串的一部分
	public void write(String str, int off, int len) throws IOException {
		synchronized (lock) {
			char cbuf[];
			if (len <= writeBufferSize) {
				if (writeBuffer == null) {
					writeBuffer = new char[writeBufferSize];
				}
				cbuf = writeBuffer;
			} else {
				cbuf = new char[len];
			}
			str.getChars(off, (off + len), cbuf, 0);
			write(cbuf, 0, len);
		}
	}

	// 将指定字符序列添加到此writer
	//可能不添加整个序列,也可能添加,具体取决于字符序列 csq 的 toString 规范。例如,调用一个字符缓冲区的 toString 方法将返回一个子序列,其内容取决于缓冲区的位置和限制。
	public Writer append(CharSequence csq) throws IOException {
		if (csq == null)
			write("null");
		else
			write(csq.toString());
		return this;
	}

	// 将指定字符添加到此writer
	public Writer append(char c) throws IOException {
		write(c);
		return this;
	}

	// 刷新 Writer 和 OutputStream 链中的所有缓冲区
	//如果此流的预期目标是由底层操作系统提供的一个抽象(如一个文件),则刷新该流只能保证将以前写入到流的字节传递给操作系统进行写入,但不保证能将这些字节实际写入到物理设备(如磁盘驱动器)。
	abstract public void flush() throws IOException;

	// 关闭此流,但要先刷新它。在关闭该流之后,再调用 write() 或 flush() 将导致抛出 IOException。关闭以前关闭的流无效。 
	abstract public void close() throws IOException;
}
分享到:
评论

相关推荐

    MTK_SN_IMEI_Writer+META_DLL编译源码

    MTK的SN烧写程序源码,本来已经有人上传过了,但是那个人少传了几个lib文件,我这里给补上了,放在了Release里,并带上了lib编译的源码,在23825756META_DLL_exe_v6.1320.01里

    PDFFileWriter-master.zip

    6. **图表**:虽然描述中没有明确指出,但通常这类库会支持生成图表,如条形图、饼图、折线图等,这对于报告和数据分析非常有用。 7. **二维码**:生成二维码是现代文档中的常见需求,PDFFileWriter支持将文本或...

    X141_EmvREADERwriter_emvcarding_EMV_carding_EMVReader,Writer_源码.

    《深入理解EMV卡读写技术:X141_EmvREADERwriter_emvcarding_EMV_carding_EMVReader,Writer源码解析》 在信息技术领域,智能卡技术是安全支付、身份验证等众多应用的重要支柱。EMV(Europay, Mastercard, Visa)...

    zap操作日志实例及源码分析.docx

    Zap操作日志实例及源码分析 在本文档中,我们将探讨 Zap 操作日志实例 及其源码分析。Zap 是一个功能强大且灵活的日志记录器,广泛应用于 Go 语言项目中。下面我们将详细介绍 Zap 的使用和源码分析。 日志记录器的...

    Java rt.jar 源码分析

    源码分析对于深入理解Java平台的工作原理、优化代码性能以及进行二次开发具有重要的价值。 rt.jar中的源码虽然默认并未提供,但可以通过一些工具,如JDK的`src.zip`或者使用OpenJDK的源码仓库来获取。这些源码提供...

    OFD Reader & Writer 开源的OFD处理库

    6. 导出:导出功能允许用户将OFD文档内容导出为纯文本、HTML或者其他格式,便于进行数据分析、文本挖掘等操作。 总的来说,OFD Reader & Writer 是一个强大的开发工具,对于那些需要处理OFD文档的开发者来说,它...

    Card Reader Writer Mifare_CARD_thread_源码.zip

    源码分析:Card Reader Writer Mifare_CARD_thread_源码.zip 这个压缩包中的源码主要涉及了MIFARE卡片的读写操作,并且在实现过程中使用了多线程技术。MIFARE卡片是一种常见的非接触式智能卡,广泛应用于门禁系统、...

    sd-writer 飞凌一键烧写 完全版

    "所有.c和.h源码"这部分表明,此压缩包中包含了用于实现"sd-writer 飞凌一键烧写"功能的全部源代码,包括.c文件(C语言源代码)和.h文件(头文件)。这对于开发者来说非常有价值,因为可以直接查看和修改源代码,...

    corejava7源码

    《Core Java 7源码分析》 在Java编程领域,Core Java系列书籍是广大开发者学习和进阶的重要参考资料。Core Java 7,即《Core Java Volume I - Fundamentals》的第七版,它深入探讨了Java语言的核心特性,包括面向...

    EMV Reader Writer_EMV_Windows编程_源码.zip

    4. **源码分析**: - 源码中可能包含EMV交易流程的实现,如初始化、选择应用、读取记录、验证PIN等步骤。 - 可能有错误处理机制,当卡片或网络出现问题时,程序能够适当地响应。 - 可能涉及到与特定硬件设备的...

    JavaCodeAnalysis:Java源码分析学习

    在Java编程世界里,源码分析是提升编程技能和理解框架内部运作机制的关键步骤。"JavaCodeAnalysis"项目正致力于帮助开发者深入理解Java语言及其常用库的底层实现。这个项目包含了一个名为"JavaCodeAnalysis-master...

    spring batch 源码

    通过分析 Spring Batch 的源码,我们可以掌握这个框架的精髓,从而更好地利用它来构建高效率、可扩展的批处理系统。在实际工作中,结合 Spring Boot 和 Spring Batch,可以快速构建出强大的数据处理解决方案。

    EMV Reader Writer_EmvREADERwriter_EMV_EMVReader,Writer_EMVReader

    5. **源码分析**:"emvchip_源码.zip"可能包含以下部分: - **通信协议**:源码可能涉及到与EMV读卡器之间的通信协议,如ISO 7816或PC/SC。 - **命令集**:实现EMV指令集,用于执行卡片操作,如SELECT、GET ...

    EMV Writer Reader Software v8_EmvREADERwriter_EMV_emvv8_源码.zip

    7. **安全性**:源码分析可以帮助找出潜在的安全漏洞,例如不安全的加密实现或认证机制。 8. **软件架构**:了解软件的模块划分、类设计和程序流程,可以学习到如何构建高效、可扩展的智能卡管理软件。 9. **编程...

    PipedWriter和PipedReader源码分析_动力节点Java学院整理

    ### PipedWriter 和 PipedReader 源码分析 在 Java 中,`PipedWriter` 和 `PipedReader` 是一种特殊的流,它们被设计用来在两个线程之间传递数据。通常,一个线程通过 `PipedWriter` 写入数据,而另一个线程通过 `...

    Java BufferedWriter BufferedReader 源码分析

    源码分析通常会涉及这些方法的具体实现,包括如何管理缓冲区,何时从底层流读取数据,以及如何处理行结束符等。 综上所述,BufferedWriter和BufferedReader是Java IO流中的重要组件,它们通过内部缓冲机制提升了IO...

    StyleWriter(英文润色软件)

    StyleWriter的核心功能在于其全面的文本分析能力。它能深入到文章的每个角落,找出语法错误、拼写问题以及用词不当之处,确保文章的基本规范。不仅如此,它还能识别出复杂的句子结构和冗余表达,帮助用户简化语言,...

    JDK源码选读

    源码分析是提高Java程序员技能的关键步骤,因为通过阅读源码,我们可以理解Java平台如何处理内存管理、多线程、类加载、异常处理等核心概念。 1. **内存管理**:JDK中的`java.lang.Runtime`类提供了与Java虚拟机...

    datax源码在线下载

    DataX的源码分析可以从以下几个方面进行: 1. **框架结构**:DataX的整体架构采用插件化的思想设计,主要分为三大部分:Reader(数据源读取)、Writer(数据源写入)和Core(核心框架)。Reader负责从源数据源读取...

Global site tag (gtag.js) - Google Analytics