`
红桃貳
  • 浏览: 40350 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java 学习笔记- I/O - Character Stream

阅读更多



 

所有Character Stream的类都继承类Reader 或 Writer。

对于Character Stream的类来说,其行为上类似于对Byte Stream的封装,在真正进行物理I/O操作是也是通过Byte Stream 与Character Stream之间的互相转换来实现的。

常用的Character Stream 类有 :

FileReader,FileWriter常用的构造方法 FileReader(String fileName),FileWriter(String fileName), 或者FileReader(File file),FileWriter(File file). 常用方法为 read() 和write(int c)

FileReader,FileWriter分别继承类InputStreamReader 和OutputStreamWriter 而这两个父类的构造方法的参数分别为字节流类型的InputStream 和OutputStream,所以也可以说Character Stream 是对Byte Stream的封装。

代码示例:

package io.characterstream;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * IO Stream:
 * 
 * 2.Character Stream. All Character Stream classes are descended from Reader and Writer. Java Platform stores character
 * values using Unicode convention。 Character Stream I/O automatically translates this internal format to and from the
 * local character set.
 * 
 * @author PENGGR
 * 
 */

public class CopyCharacters {

    public static void main(String[] args) {
        FileReader inputStream = null;
        FileWriter outputStream = null;

        try {
            inputStream = new FileReader("D:\\360云盘\\javase\\src\\io\\xanadu.txt");
            outputStream = new FileWriter("D:\\360云盘\\javase\\src\\io\\characterStreamOut.txt");
            int c;
            while ((c = inputStream.read()) != -1) {
                outputStream.write(c);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (inputStream != null) {
                    inputStream.close();
                }
                if (outputStream != null) {
                    outputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}

 

此外,类BufferedReader,BufferedWriter是常用的Character Stream的Buffer,其构造方法为BufferedReader(Reader in ),BufferedWriter(Writer out) 常用方法为 readLine() write(String l).

代码示例:

 

package io.characterstream;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class CopyLines {

    public static void main(String[] args) {
        BufferedReader inputStream = null;
//        PrintWriter outputStream = null;
        BufferedWriter bout = null;
        try {
            inputStream = new BufferedReader(new FileReader("D:\\360云盘\\javase\\src\\io\\xanadu.txt"));
            bout = new BufferedWriter(new FileWriter("D:\\360云盘\\javase\\src\\io\\characterLineOut.txt"));
//            outputStream = new PrintWriter(new FileWriter("D:\\360云盘\\javase\\src\\io\\characterLineOut.txt"));
            String l;
            while ((l = inputStream.readLine()) != null) {
                // outputStream.write(l);
                // outputStream.println(l);
                System.out.println(l);
                bout.write(l + "\n");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {

            try {
                if (inputStream != null) {
                    inputStream.close();
                }
                // if (outputStream != null) {
                // outputStream.close();
                // }
                if (bout != null) {
                    bout.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

此外,如果这段代码finally 里面的bout 对象没有被close,那么写入的文件中是看不到任何内容的,除非调用了flush方法把 字符流从内存写入到文件中。 此处想说的是character stream是在输出流关闭的时候或者缓存了足够大的容量的时候才把内容写到文件上,但是Byte stream 是实时写入文件的,所以,character stream的真正IO操作相对少一些,效率高一些。

 

 

  • 大小: 190.4 KB
1
0
分享到:
评论

相关推荐

    java io流学习笔记1

    本篇学习笔记主要聚焦于Java IO流的基本概念、分类、使用方法以及在实际开发中的应用。 一、Java IO流简介 Java IO流分为字符流和字节流两大类,它们都继承自抽象基类`java.io.InputStream`和`java.io.OutputStream...

    达内Java笔记 各种总结

    Java的I/O流处理涵盖了文件读写、网络通信等场景。流分为字节流(Byte Stream)和字符流(Character Stream),又有输入流(InputStream/Reader)和输出流(OutputStream/Writer)。缓冲流(Buffered Stream)用于...

    java笔记(20220104202019).pdf

    - Java的IO流模型处理输入和输出数据,分为字节流(Byte Stream)和字符流(Character Stream)。 - 流的方向:输入流(InputStream/Reader)和输出流(OutputStream/Writer)。 - 文件操作:File类用于文件的...

    10-java进阶-IO流1

    File file2 = new File("D:\\计算机学习\\java\\尚硅谷课件笔记源码资料"); ``` File对象提供了很多方法,如`exists()`用于检查文件或目录是否存在,`isDirectory()`用于判断是否为目录,`mkdir()`和`mkdirs()`分别...

    狂神说笔记,个人觉得不赖

    "狂神说笔记"显然是一份专门针对Java学习的资料,受到了个人的好评。其中包含的"10、JavaSE:IO流.pdf"文件,显然是关于Java标准版(JavaSE)中的输入/输出(IO)流部分的内容。这部分知识对于任何Java开发者来说都...

    观看韩顺平Java的 所做的笔记 到数据库中 其中里面有我很多心得 老手可以用来复习 新手可以用学习 也可以当做参考 来做笔记

    IO流在Java中主要分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流主要用于处理二进制数据,而字符流则更适合处理文本数据。根据数据流向,流又分为输入流(Input Stream)和输出流(Output ...

    java IO流学习笔记——(3)字节缓冲流&字符缓冲流&转换流&数据流

    Java IO流是Java平台中处理输入输出操作的重要组成部分,它提供了丰富的类库来高效地读写数据。在Java中,IO流分为字节流和字符流两大类,每类又...理解并熟练掌握这些流的使用,对于编写高效的Java I/O程序至关重要。

    Java IO学习总结归纳(附代码)

    Java将所有IO操作封装为流对象,分为四大类:字节流(Byte Stream)和字符流(Character Stream),以及输入流(InputStream/Reader)和输出流(OutputStream/Writer)。字节流处理单字节数据,字符流处理Unicode...

    IO操作.pdf

    包括`BufferedInputStream`、`BufferedOutputStream`、`BufferedReader`和`BufferedWriter`,这些类通过内存缓冲区提高读写性能,减少频繁的磁盘I/O操作。 5. **对象流(Object Stream)** `ObjectInputStream`和...

    数据流和多线程笔记

    Java中的流主要分为两种类型:字节流(Byte Streams)和字符流(Character Streams)。 - **字节流**:处理二进制数据,以8位字节的形式传输数据。 - **字符流**:处理文本数据,以16位Unicode字符的形式传输数据。...

    Java_Kartice

    6. **IO流**:Java的I/O流用于读写数据,包括字符流(Character Stream)和字节流(Byte Stream),分为输入流(InputStream/Reader)和输出流(OutputStream/Writer)。 7. **多线程**:Java内置对多线程的支持,...

Global site tag (gtag.js) - Google Analytics