博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第15章-输入/输出 --- 字节流和字符流
阅读量:4314 次
发布时间:2019-06-06

本文共 3739 字,大约阅读时间需要 12 分钟。

(一)字节流和字符流

    字节流和字符流的操作方式几乎完全一样,区别只是操作的数据单元不同而已----字节流操作的数据单元是字节,字符流操作的数据单元是字符。

 

(二)InputStream和Reader

    InputStream和Reader是所有输入流的抽象基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板,所以它们的方法是所有输入流都可使用的方法

    在InputStream里包含如下3个方法:

    a. int read():从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转换为int类型)

    b. int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数

    c. int read(byte[] b,int off,int len):从输入流中最多读取len个字节数据,并将其存储在数组b中,放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际去读的字节数。

 

    在Reader里包含如下3个方法:

    a.  int read():从输入流中读取单个字符,返回所读取的字符数据(字符数组可直接转换为int类型)

    b.  int read(char[] cbuf):从输入流中最多读取cbuf.length个字符的数据,并将其存储在字符数组cbuf中,返回实际读取的字符数。

    c.  int read(char[] cbuf,int off,int len):从输入流中最多读取len个字符的数据,并将其存储在字符数组cbuf中,放入数组cbuf中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字符数。

 

 

  下面举例:

   InputStream和Reader都是抽象类,本身不能创建实例,但他们分别有一个用于读取文件的输入流:FileInputStream和FileReader,它们都是节点流----会直接和指定文件关联。

  

import java.io.FileInputStream;import java.io.IOException;public class FileInputStreamTest{    public static void main(String[] args) throws IOException    {        String filePath = "";//读取文件的路径        //创建字节输入流        FileInputStream fis = new FileInputStream(filePath);                //创建一个长度为1024字节数组        byte[] bbuf = new byte[1024];                //用于保存实际读取的字节数        int hasRead = 0;                //使用循环来读取        while((hasRead = fis.read(bbuf)) > 0)        {            System.out.println(new String(bbuf,0,hasRead));        }                //关闭文件输入流        fis.close();    }}

 

 

import java.io.FileReader;import java.io.IOException;public class FileReaderTest{    public static void main(String[] args)    {        String filePath = "";//读取文件的路径        try        {            //创建字符输入流            FileReader fr = new FileReader(filePath);            char[] cbuf = new char[32];            int hasRead = 0;                        while((hasRead = fr.read(cbuf)) > 0)            {                System.out.println(new String(cbuf,0,hasRead));            }        }        catch(IOException e)        {            e.printStackTrace();        }    }}

 

  

(三)OutputStream和Writer

    两个流都提供了如下3个方法:

    a. void write(int c):将指定的字节/字符输出到输出流中,其中c既可以代表字节,也可以代表字符。

    b. void write(byte[]/char[] buf):将字节数组/字符数组中的数据输出到指定输出流中

    c. void write(byte[]/char[] buf,int off,int len):将字节数组/字符数组中从off位置开始,长度为len的字节/字符输出到输出流中。

 

      因为字符流直接以字符作为操作单位,所以Writer可以用字符串来代替字符数组,即以String对象作为参数。

      Writer里还包括以下两个方法:

     a. void write(String str):将str字符串里包含的字符输出到指定输出流中

     b.  void write(String str,int off,int len):将str字符串里从off位置开始,长度为len的字符输出到指定的输出流中。

 

下面程序使用FileInputStream来执行输入,并使用FileOutputStream来执行输出,用以实现文件的复制功能:

import java.io.FileInputStream;import java.io.FileOutputStream;public class FileOutputStreamTest{    public static void main(String[] args)    {        try        {            //创建字节输入流            FileInputStream fis = new FileInputStream("props.txt");                        //创建字节输出流            FileOutputStream fos = new FileOutputStream("props2.txt");                        byte[] bbuf = new byte[32];                        int hasRead = 0;                        //循环从输入流中读取数据            while((hasRead = fis.read(bbuf)) > 0)            {                //每读取一次,即写入文件输出流,读了多少,就写多少                fos.write(bbuf, 0, hasRead);            }        }        catch(Exception e)        {            e.printStackTrace();        }    }}

 

 

import java.io.FileWriter;import java.io.IOException;public class FileWriterTest{    public static void main(String[] args)    {        try        {            FileWriter fw = new FileWriter("heihei.txt");            fw.write("大家好\r\n");            fw.write("努力学习,好好工作\r\n");        }        catch(IOException e)        {            e.printStackTrace();        }    }}

转载于:https://www.cnblogs.com/baiduligang/p/4247457.html

你可能感兴趣的文章
判断时间或者数字是否连续
查看>>
docker-daemon.json各配置详解
查看>>
Docker(一)使用阿里云容器镜像服务
查看>>
FFmpeg 新旧版本编码 API 的区别
查看>>
RecyclerView 源码深入解析——绘制流程、缓存机制、动画等
查看>>
Android 面试题整理总结(一)Java 基础
查看>>
Android 面试题整理总结(二)Java 集合
查看>>
学习笔记_vnpy实战培训day02
查看>>
学习笔记_vnpy实战培训day03
查看>>
VNPY- VnTrader基本使用
查看>>
VNPY - CTA策略模块策略开发
查看>>
VNPY - 事件引擎
查看>>
MongoDB基本语法和操作入门
查看>>
学习笔记_vnpy实战培训day04_作业
查看>>
OCO订单(委托)
查看>>
学习笔记_vnpy实战培训day06
查看>>
回测引擎代码分析流程图
查看>>
Excel 如何制作时间轴
查看>>
matplotlib绘图跳过时间段的处理方案
查看>>
vnpy学习_04回测评价指标的缺陷
查看>>