博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java IO学习笔记三
阅读量:5894 次
发布时间:2019-06-19

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

Java IO学习笔记三

  • 在整个IO包中,实际上就是分为字节流和字符流,但是除了这两个流之外,还存在了一组字节流-字符流的转换类。

  • OutputStreamWriter:是Writer的子类,将输出的字符流变为字节流,即:将一个字符流的输出对象变成字节流的输出对象。

  • InputStreamReader:是Reader的子类,将输入的字节流变为字符流,即:将一个字节流的输入对象变成字符流的输入对象。

  • 一般在操作输入输出内容就需要使用字节或字符流,但是有些时候需要将字符流变成字节流的形式,或者将字节流变为字符流的形式,所以,就需要另外一组转换流的操作类。

InputStreamReader

  • InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

  • 每次调用 InputStreamReader 中的一个 read() 方法都会导致从底层输入流读取一个或多个字节。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。

  • 主要的功能还是从文件中读取内容,不过是一次性的读取多个字节,这个很像它的子类FileReader

构造函数

  • InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader,不过这里的InputStream是抽下类,因此可以使用它的子类FileInputStream实例化,这里的FileInputStream是操作字节流的,显然看出这个类的作用就是字符流和字节流的桥梁

常用方法

  • close()

  • int read() 读取单个字符

  • int read(Char[] c) 读取字符存储在字符数组中

  • int read(char[] cbuf, int offset, int length) 将字符读入数组中的某一部分

  • boolean ready() 判断此流是否已经准备好用于读取。

实例

package IO;import java.io.*;/** * Created by chenjiabing on 17-5-24. */public class demo4 {    public static void main(String args[]) {        File file = new File("/tmp" + File.separator + "test" + File.separator + "test.txt");        InputStreamReader inputStreamReader = null;        try {            inputStreamReader = new InputStreamReader(new FileInputStream(file));  //初始化            char[] c = new char[(int) file.length()];   //创建数组            try {                int len = inputStreamReader.read(c);   //将内容读取到数组中                System.out.println(len);                for (int i = 0; i < c.length; i++) {                    System.out.print(c[i]);                }            } catch (IOException e) {                e.printStackTrace();            }        } catch (FileNotFoundException e) {            e.printStackTrace();        }finally {            if(inputStreamReader!=null)            {                try {                    inputStreamReader.close();   //关闭                }catch (IOException e)                {                    e.printStackTrace();                }            }        }    }}

注意:从上面的代码中可以看到这个和FileReader的操作是一样的,只是构造的方法不一样

OutputStreamWriter

  • OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

  • 每次调用 write() 方法都会导致在给定字符(或字符集)上调用编码转换器。在写入底层输出流之前,得到的这些字节将在缓冲区中累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递给 write() 方法的字符没有缓冲。

  • 主要的功能还是向文件中写入文件

构造函数

  • OutputStreamWriter(OutputStream out) 创建使用默认字符编码的 OutputStreamWriter。这里同样是抽象类,所以用它的子类FileOutputStream实例化

常用方法

  • close()

  • flush()

  • write(String str) 写入字符串

  • void write(String str, int off, int len) 写入字符串的某一部分。

  • write(int c) 写入单个字符

  • void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。

实例

package IO;import java.io.*;/** * Created by chenjiabing on 17-5-24. */public class demo5 {    public static void main(String[] args)    {        File file=new File("/tmp"+File.separator+"test"+File.separator+"test.txt");        OutputStreamWriter outputStreamWriter=null;        try {            outputStreamWriter=new OutputStreamWriter(new FileOutputStream(file,true));            String str="陈加兵\n";            int data=48;            String name="chenjiabing";            try {                outputStreamWriter.write(str);                outputStreamWriter.write(data);                outputStreamWriter.write(name,0,2);   //写入字符串的一部分            }catch (IOException e)            {                e.printStackTrace();            }        }catch (FileNotFoundException e)        {            e.printStackTrace();        }finally {            if(outputStreamWriter!=null)            {                try {                    outputStreamWriter.flush();                    outputStreamWriter.close();                }catch (IOException e)                {                    e.printStackTrace();                }            }        }    }}

从上面可以看出OutputStreamWriterFileWriter的用法一样

参考文章

转载地址:http://ixisx.baihongyu.com/

你可能感兴趣的文章
心情笔记
查看>>
css动画-animation各个属性详解(转)
查看>>
CSS的盒子模型
查看>>
lavas安装
查看>>
地址总线 数据总线 和控制总线的作用
查看>>
微信群之Java技术红包问答
查看>>
BZOJ2663 [Beijing wc2012]灵魂宝石
查看>>
go面试题
查看>>
WS_CLIPCHILDREN与WS_CLIPSIBLINGS
查看>>
.NET 环境下运行tensorflow
查看>>
第二次结对编程作业——毕设导师智能匹配
查看>>
C# 消息队列 多线程 委托
查看>>
Java 集合、Iterator迭代器、泛型等
查看>>
semantic ui框架学习笔记二
查看>>
SQL Server中DateTime与DateTime2的区别
查看>>
可集成到APP的车架号识别sdk
查看>>
jQuery获取margin-top和padding-top的值
查看>>
java集合 collection-list-ArrayList 去除ArrayList集合中的重复元素。
查看>>
Hacker(六)----黑客藏匿之地--系统进程
查看>>
[Android UI] Service里面启动Activity和Alertdialog
查看>>