美文网首页
java——IO讲解(字符流和缓冲区的使用)

java——IO讲解(字符流和缓冲区的使用)

作者: 这颗螺丝钉姓赵 | 来源:发表于2017-03-23 11:37 被阅读0次

在java中字节流主要是对一些视频,音频,图片进行操作,而字符流则是对一些字符操作。
和字节流一样,字符流也有两个基类:
字符输出流:“Writer”
字符输入流:“Reader”
通过一个实现类FielWriter和FielReader可以实现字符流的输入输出操作。
先介绍一下Writer的相关方法:
·public void write(int c) throws IOException
【将内容写入指定的文件,每次写入一个字符,该数据类型就是一个ASC码,根据该ASC码就可以找到对应的字符】

·public void write(char[] cbuf) throws IOException:
【每次写入一个字符数组的内容】

·public void write(String str) throws IOException:
【每次直接写入一个字符串】
示例:

package com.zhaoqiang.writer;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Iterator;

public class Demo1 {

    public static void main(String[] args) throws IOException {
        File f = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");
        if (!f.getParentFile().exists()) {
            f.getParentFile().mkdirs();
            f.createNewFile();
        }
        
        // 创建字符流输出对象
        Writer out = new FileWriter(f);
        
        String str ="测试数据";
        
        // 获取字符数组
        char[] ch = str.toCharArray();
        
        // 第一种方法
        for (char c : ch) {
            out.write(c);
        }
        // 第二种方法
//      out.write(ch);
        
        // 第三种方法
//      out.write(str);
        
        
        out.flush();
        out.close();
    }

}

flush()是刷新缓存里面的数据.
下面介绍Reader里面的相关方法:
·public int read() throws IOException:
【每次读取一个字符,将字符的ASC返回,如果读取到最后返回-1】

·public int read(char[] cbuf) throws IOException
【每次读取一个字符数组的内容,返回的吗每次读取的数据的长度,
如果读取到最后返回-1】

·public abstract int read(char[] cbuf, int off, int len)
【每次读取指定的字符数组的指定的内容,
off表示要保存的数组的起始下标
len表示要保存的数据长度】
示例:

package com.zhaoqiang.Reader;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class Demo1 {

    public static void main(String[] args) throws IOException {
        File f = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");
        if (!f.getParentFile().exists()) {
            f.getParentFile().mkdirs();
            f.createNewFile();
        }
        
        // 创建一个输入流对象
        Reader re = new FileReader(f);
        
        int len = 0 ;
        
        // 第一种:输入一个字符
//      while ((len = re.read()) != -1) {
//          System.out.println((char)len); // 一个一个字符输出
//      }
//      
        
        // 第二种
        char[] ch = new char[1024];
        
        while((len = re.read(ch)) != -1){
            System.out.println(new String(ch,0,len));
        }
        
        // 输入指定长度的字符
        re.read(ch, 0, 10);
        re.close();
    }

}

缓冲区:BufferedOutputStream,BufferedInputStream;
示例:

package com.zhaoqiang.buffer;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo1 {

    public static void main(String[] args) throws IOException {
        
        File f = new File("F:"+File.separator+"Demo"+File.separator+"12.jpg");
        File of = new File("D:"+File.separator+"Demo"+File.separator+"2.jpg");
        
        // 创建字节输入流缓冲区
        BufferedInputStream bi = new BufferedInputStream(new FileInputStream(f));
        
        // 创建字节输出流缓冲区
        BufferedOutputStream bs = new BufferedOutputStream(new FileOutputStream(of));
        
        byte[] by = new byte[1024];
        
        int len = 0;
    
        
        while((len = bi.read(by)) != -1){
            bs.write(by, 0, len);
            bs.flush();
        }
        bs.close();
        bi.close();
    }

}


字符流缓冲区:BufferedReader,BufferedWriter;
示例:

package com.zhaoqiang.buffer;

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

public class Demo2 {

    public static void main(String[] args) throws IOException {
        
        // 目的文件
        File f = new File("F:"+File.separator+"Demo"+File.separator+"test.txt");
        
        // 源文件
        File of = new File("D:"+File.separator+"Demo"+File.separator+"test.txt");
        
        // 字符输入流缓冲区
        BufferedReader br = new BufferedReader(new FileReader(of));
        
        // 字符输出流缓冲区
        BufferedWriter bw = new BufferedWriter(new FileWriter(f));
        
        String str = "";
        
        // 第二种方法,一行读取
        while((str = br.readLine()) != null){
            bw.write(str);
            bw.newLine();
            bw.flush();
        }
        // 第一种方法,单个字符读取
//      int len = 0;
//      while((len = br.read())!=-1){
//          bw.write(len);
//          bw.flush();
//      }
        
        bw.close();
        br.close();

    }

}

对于字符流缓冲区,和字节流缓冲区他们的底层实现还是使用的是java提供的输入输出流方法。只是添加一个缓冲区可以提高输入输出之间的传输效率。

相关文章

  • java基础之IO流

    IO流上:概述、字符流、缓冲区(java基础) IO流结构图 FilterInputStream、FilterOu...

  • 01Nio-Buffer

    缓冲区的使用 Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO...

  • 从0开始复习java(9)--IO

    Java的io通过java.io包下的类和接口支持。主要有输入、输出流,又分为字节流和字符流。Java的io流使用...

  • java——IO讲解(字符流和缓冲区的使用)

    在java中字节流主要是对一些视频,音频,图片进行操作,而字符流则是对一些字符操作。和字节流一样,字符流也有两个基...

  • java-nio学习之java io比较

    java io 基本介绍 java nio和io区别 面向流与面向缓冲 IO是面向流的,NIO是面向缓冲区的。 J...

  • Java IO 节点流和字符流 学习 + 案例分析

    Java IO 节点流和字符流 学习 + 案例分析

  • 第53节:Java当中的IO流(上)

    Java当中的IO流 在Java中,字符串string可以用来操作文本数据内容,字符串缓冲区是什么呢?其实就是个容...

  • IO、NIO

    IO、NIO Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO...

  • 字节流和字符流的区别&常用方法总结

    参考:深入理解Java中的IO · 节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字...

  • Java IO和NIO

    Java IO Java IO面向流,按照流中的最小数据单元可以分为字节流和字符流,顾名思义分别以字节和字符作为数...

网友评论

      本文标题:java——IO讲解(字符流和缓冲区的使用)

      本文链接:https://www.haomeiwen.com/subject/dneznttx.html