声明 我看的是java7的API文档。
如下图所示,java.io.writer 继承了java.lang.Object,实现的接口有Closeable, Flushable, Appendable, AutoCloseable。
所有直接继承它的子类有BufferedWriter CharArrayWriter FilterWriter OutputStreamWriter PipedWriter PrintWriter StringWriter。
Writer是用来操作字符流的抽象类。所有继承它的子类必须要重写的方法有write(char[], int, int), flush(), and close().
下面是java.io.Writer的源码。
package java.io; public abstract class Writer implements Appendable,Closebale,Flushable{ private char[] writeBuffer;
private static final int WRITE_BUFFER_SIZE = 1024;
projected Object lock; protected Writer(){
this.lock = this;
} protected Writer(Object lock){
if(lock == null){
throw new NullPointerException();
}
this.lock = lock;
} public void write(int c) throw IOException{
syschronized (lock){
if (writeBuffer == null){
writeBuffer = new char[WRITE_BUFFER_SIZE];
}
writeBuffer[0] = (char) c;
write(writeBuffer,0,1);
}
} public void write(char cbuf[]) throw IOException{
write(cbuf, 0, cbuf.length);
} abstract public void write(char buf[], int off, int len) throw IOException; public void write(String str) throw IOException{
write(str, 0, str.length());
} public void write(String str, int off, int len) throw IOException{
syschronized(lock){
char cbuf[];
if(len <= WRITE_BUFFER_SIZE){
if(writeBuffer == null){
writeBuffer = new char[WRITE_BUFFER_SIZE];
}
cbuf = writeBuffer;
}else{
cbuf = new char[len];
}
str.getChars(off, (off + len), cbuf, 0);
write(cbuf,0,len);
}
} public Writer append(CharSequence csq) throws IOException{
if(csq == null)
write("null");
else
write(csq.toString());
return this;
} public Writer append(CharSequence csq, int start, int end) throw IOException{
CharSequence cs = (csq == null ? "null" : csq);
write(cs.subSequence(start,end).toString());
return this;
} public Writer append(char c) throw IOException{
write(c);
return this;
} abstract public void flush() throw IOException; abstract public void close() throw IOException;
}
可以看到在Writer类中子类必须重写的类有三个,
1、abstract public void write(char buf[], int off, int len) throw IOException;
2、abstract public void flush() throw IOException;
3、abstract public void close() throw IOException;
其中,下面三个方法是实现Appendable接口必须实现的方法
1、public Writer append(CharSequence csq) throws IOException
2、public Writer append(CharSequence csq, int start, int end) throw IOException
3、public Writer append(char c) throw IOException
实现 Flushable接口必须实现的方法是
abstract public void flush() throw IOException;
实现Closeable接口必须实现的方法是
abstract public void close() throw IOException;
java.io.writer API 以及 源码解读的更多相关文章
-
java.io.BufferedWriter API 以及源码解读
下面是java se 7 API 对于java.io.BufferedWriter 继承关系的描述. BufferedWriter可以将文本写入字符流.它会将字符缓存,目的是提高写入字符的效率. bu ...
-
图解 Java IO : 二、FilenameFilter源码
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
-
图解 Java IO : 一、File源码
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
-
Java IO 之 FileInputStream &; FileOutputStream源码分析
Writer :BYSocket(泥沙砖瓦浆木匠) 微 博:BYSocket 豆 瓣:BYSocket FaceBook:BYSocket Twitter ...
-
OutputStreamWriter API 以及源码解读
OutputStreamWriter是字符流与字节流之间的桥梁. 通过它写入的字符流可以通过特殊的字符集转化为字节流.这个特殊的字符集可以指定,也可以采用平台默认的字符集. 每一次调用write()方 ...
-
java jdk 中HashMap的源码解读
HashMap是我们在日常写代码时最常用到的一个数据结构,它为我们提供key-value形式的数据存储.同时,它的查询,插入效率都非常高. 在之前的排序算法总结里面里,我大致学习了HashMap的实现 ...
-
java.lang.system 类源码解读
通过每块代码进行源码解读,并发现源码使用的技术栈,扩展视野. registerNatives 方法解读 /* register the natives via the static initializ ...
-
HttpClient 4.3连接池参数配置及源码解读
目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB-&g ...
-
Apache Beam WordCount编程实战及源码解读
概述:Apache Beam WordCount编程实战及源码解读,并通过intellij IDEA和terminal两种方式调试运行WordCount程序,Apache Beam对大数据的批处理和流 ...
随机推荐
-
linux主机vps简单性能测试
第一,CPU.内存.硬盘检测 cat /proc/cpuinfo (查看CPU信息) cat /proc/meminfo (查看内存信息) df -lh (查看硬盘信息) 这个命令可以看到我们购买的V ...
-
微信小程序学习笔记(阶段二)
二阶段学习过程: (一)看官方文档的框架.组件.API:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看极客学院第3.4章视频:http://www.ph ...
-
centos7进单用户
当重启linux系统,进入系统选择页面的时候,按e 在linux16那一行最后面添加 init=/bin/sh 按ctrl+c 挂载根分区,可读写 mount / -o rw, remount
-
Hadoop记录-技术网站
Grafan监控:http://docs.grafana.org/ Tez:http://tez.apache.org/install.html 阿里巴巴镜像:https://opsx.alibaba ...
-
Java方法区(Method Area)
方法区与Java堆一样,是各个线程共享的内存区域,他在与存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据,虽然Java虚拟机规范把方法区描述为堆得一个逻辑部分,但是他却有一个别 ...
-
HDU - 1392 凸包求周长(模板题)【Andrew】
<题目链接> 题目大意: 给出一些点,让你求出将这些点全部围住需要的多长的绳子. Andrew算法 #include<iostream> #include<cstdio& ...
-
scala的hello world出现的问题
build出现: Error:scalac: Error: org.jetbrains.jps.incremental.scala.remote.ServerExceptionError compil ...
-
【NuGet】使用NuGet打包并发布至ProGet过程 (步骤详细,附python脚本)【上篇】
一.基本知识 (1)NuGet : NuGet是一个为大家所熟知的Visual Studio扩展,通过这个扩展,开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件, ...
-
转:Lucene之计算相似度模型VSM(Vector Space Model) : tf-idf与交叉熵关系,cos余弦相似度
原文:http://blog.csdn.net/zhangbinfly/article/details/7734118 最近想学习下Lucene ,以前运行的Demo就感觉很神奇,什么原理呢,尤其是查 ...
-
Oracle 数据库备份还原(Expdp/impdp)记录
最近公司将原数据库服务器切换.之前没整过这块,也是一堆的度娘.经过不停的摸索,终于成功了.现在将这份艰辛记录下来,方便自己以后查阅的同时,方便有类似需求的同学参考. 我们此次切换共分:ERP.LOS. ...