`
wdhdmx
  • 浏览: 304457 次
  • 性别: Icon_minigender_1
  • 来自: 山西
博客专栏
D4bbb5f7-9aa4-3e66-8194-f61b3f0241c2
天天编程
浏览量:21974
社区版块
存档分类
最新评论

字符流(一)Reader和Writer源码理解

阅读更多

1.Reader

1.1 继承关系

public abstract class Reader implements Readable, Closeable{}
//下面是两个接口所需要实现的类
public interface Readable {
    public int read(java.nio.CharBuffer cb) throws IOException;
}
public interface Closeable {
    public void close() throws IOException;
}

1.2 部分方法

     //两个未实现的方法
     abstract public void close() throws IOException;
     abstract public int read(char cbuf[], int off, int len) throws IOException;
    //一个对象锁,这个会在构造方法中进行赋值。
    protected Object lock;
    protected Reader() {
	this.lock = this;
    }
    //这个锁会在skip方法中出现
    synchronized (lock) {
    //这里是读操作,读多少个字符。还有判断可能文件尾
    }

1.3 锁的基本介绍

上面方法中用到的锁在使用时,使用不带锁的方法是不受影响的,只有两个方法同时带锁才会受影响.

下面是写的一个例子,了解锁起到的作用。

public static void main(String args[]) throws Exception {
	final Object w = new Object();
	Thread t = new Thread() {
		public void run() {
			try {
				System.out.println("线程开始,先休息0.01s,这样可以保证主线程的锁先启动");
				Thread.sleep(10);
				System.out.println(w+"这里可以表明使用w对象的方法的");
				System.out.println("等待主线程的同步块完成");
				synchronized (w) {
					System.out.println("进入线程同步块");
					Thread.sleep(1000);
					System.out.println("线程同步结束");
				}
				System.out.println("线程结束");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	};
	t.start();
	synchronized (w) {
		System.out.println("主线程的同步开始");
		Thread.sleep(1000);
		System.out.println("主线程的同步结束");
	}
}

//输出结果:
主线程的同步开始
线程开始,先休息0.01s,这样可以保证主线程的锁先启动
java.lang.Object@1fb8ee3这里可以表明使用w对象的方法的
等待主线程的同步块完成
主线程的同步结束
进入线程同步块
线程同步结束
线程结束 

2.Writer

2.1 继承关系

public abstract class Writer implements Appendable, Closeable, Flushable {}
public interface Appendable {
    Appendable append(CharSequence csq) throws IOException;
    Appendable append(CharSequence csq, int start, int end) throws IOException;
    Appendable append(char c) throws IOException;
}
//其他两个接口就不需要看了。

2.2 部分方法

首先是看一看append方法

    //很明显是直接写入了。
    public Writer append(CharSequence csq) throws IOException {
	if (csq == null)
	    write("null");
	else
	    write(csq.toString());
    	return this;
    }

再看看几个抽象方法

    abstract public void write(char cbuf[], int off, int len) throws IOException;

    abstract public void flush() throws IOException;

    abstract public void close() throws IOException;

2.3 与锁有关的

关于写操作的内容都会加锁。

3.结束

希望继续关注字符流的其他类

1
0
分享到:
评论
1 楼 Peteryang杨 2011-11-30  
希望楼主加上使用环境,在什么具体实际环境,使用性能,效率怎么样。继续关注。。

相关推荐

    字节流字符流的使用方法源码+文档

    2. **字符流**:字符流处理的是Unicode字符,主要由`Reader`和`Writer`类及其子类构成。` FileReader`和`FileWriter`是处理文件的字符流。字符流在处理文本文件时更为方便,因为它能自动处理字符编码。在源码中,...

    JAVA范例 七)输入/输出流---字符流

    标签中的"源码"可能指的是查看和理解这些流类的内部实现,这对于深入学习和调试问题非常有帮助。而"工具"可能指的是利用这些流类来构建实用的I/O工具,比如文件复制、格式转换等。 在处理运行时需要加的包,确保在...

    Java IO 字节流 字符流

    字符流是基于Unicode编码的,它包括Reader和Writer两大类,分别用于读取和写入字符。Reader是所有字符输入流的基类,如 FileReader,它可以从文件读取字符;而Writer是所有字符输出流的基类,如 FileWriter,用于向...

    Java-IO流基础例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar

    字节流又分为输入流(InputStream)和输出流(OutputStream),字符流则有Reader和Writer。Java IO流还分为节点流和处理流,节点流直接连接到数据源或目的地,如FileInputStream和FileOutputStream;处理流则建立在...

    Java io输入输出流及字符集

    - Reader和Writer是所有字符输入流和输出流的基类。例如FileReader和FileWriter用于读写文本文件。 - BufferedReader和BufferedWriter提供缓冲功能,提高读写效率。过滤字符流,如InputStreamReader和...

    Java 输入输出流 源码

    3. **字符流**:Reader和Writer是所有字符流的基类,例如 FileReader 和 FileWriter。字符流内部使用了编码解码机制,适合处理文本数据。BufferedReader和BufferedWriter用于提高读写效率,通过缓冲区批量处理数据。...

    java IO流+socket源码 实现简单文本传输

    字符流处理的是Unicode字符,如Reader和Writer。除此之外,还有缓冲流(Buffered)、转换流(InputStreamReader/OutputStreamWriter)以及对象流(ObjectInputStream/ObjectOutputStream)等,它们各自有不同的功能...

    Java-se-io学习 Java学习资料源码

    Reader和Writer接口是字符流的父接口,具体实现如BufferedReader和BufferedWriter,它们提供了缓冲功能,提高了读写效率。 3. 转换流:InputStreamReader和OutputStreamWriter是字节流到字符流的桥梁,可以指定字符...

    字节流,字符流,对象流,序列化,持久化

    Java中,`Reader`和`Writer`是字符流的基类,它们分别对应于输入流和输出流。相比字节流,字符流在处理文本时更高效,因为它会自动处理字符编码问题。常见的字符流子类有`InputStreamReader`和`OutputStreamWriter`...

    Java中的那些“流”之JAVA基础知识之我的理解8

    Java的I/O流库提供了一整套类和接口来处理这些数据流动,如InputStream、OutputStream、Reader、Writer等,它们支持读写文件、网络通信等各种功能。 1. **输入流(InputStream和Reader)**:用于从源头(如文件、...

    Android应用源码之IOStreamSample.zip

    2. **字符流**:Reader和Writer是处理字符流的基类,常用的子类有: - FileReader和FileWriter:专门用于文件的字符读写。 - BufferedReader和BufferedWriter:提供缓冲功能,提高读写效率。 - InputStreamReader...

    Java-IO流高级-例题 & 例题源码 & PPT教学文档(黑马程序员详细版).rar

    基础流类包括InputStream/OutputStream(字节流)和Reader/Writer(字符流)。 2. **流的层次结构** Java IO流的类库形成了一个丰富的层次结构,如FileInputStream/FilteOutputStream是字节输入/输出流的子类,...

    java中IO流里面的关于File的讲解源码

    字符流处理的是字符数据,如`Reader`和`Writer`。`FileInputStream`和`FileOutputStream`是字节流的典型代表,用于读取和写入文件;而`FileReader`和`FileWriter`则是字符流,它们处理字符数据。 对于初学者来说,...

    Android经典设计源码-IOStreamSample.rar

    字节流处理单字节的数据,如InputStream和OutputStream,而字符流处理Unicode字符,如Reader和Writer。在Android中,我们通常使用字节流来读取和写入文件,因为它们可以处理二进制数据,比如图片、音频文件等;而...

    21.【缓冲流、转换流、序列化流、打印流】(1)_缓冲流_源码

    类似地,`BufferedReader`和`BufferedWriter`是对字符输入流(Reader)和字符输出流(Writer)的缓冲版本。它们在内存中创建了一个字符缓冲区,对于处理文本文件,尤其是大文件时,可以显著提升性能。这两个类也...

    达内培训的第一个项目-考试系统源码

    项目中可能使用了不同类型的流,如字节流(InputStream和OutputStream)处理二进制数据,字符流(Reader和Writer)处理文本数据,以及文件流(FileInputStream和FileOutputStream)用于文件操作。此外,缓冲流...

    最简单最好的IO学习资料 源码 注释清晰

    - **字符流**:处理的是16位的Unicode字符数据,包括Reader和Writer两大类。BufferedReader和PrintWriter是常用的字符流实现。 3. **双向流与过滤流**: - **双向流**:如PipedReader和PipedWriter,允许数据在两...

    Java基础知识源码分享

    熟悉InputStream和OutputStream的基本用法,以及Reader和Writer对于字符流的操作。 6. **多线程**: Java提供了内置的多线程支持,学习如何创建和管理线程,以及同步机制(如synchronized关键字、wait()、notify())...

Global site tag (gtag.js) - Google Analytics