outputstreamwriter.write_writevalueasstring

outputstreamwriter.write_writevalueasstring一.输出流1.1字节输出流OutputStream在java中,字节是占1个字节,即8位字节输出流OutputStream-将指定的字节写入此输出流1.2字符流Writer在java中,字符是占2个Byte,即16位字符输出流Writer-将字符写入此输出流,字符流的操作比字节流操作好在一点,比如可以直接输出字符串1.3OutputStreamWri

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一. 输出流

1.1 字节输出流OutputStream

  1. 在java中,字节是占1个字节,即8位
  2. 字节输出流OutputStream – 将指定的字节写入此输出流

1.2 字符流Writer

  1. 在java中,字符是占2个Byte,即16位
  2. 字符输出流Writer – 将字符写入此输出流,字符流的操作比字节流操作好在一点,比如可以直接输出字符串

1.3 OutputStreamWriter

OutputStreamWriter 是字符流通向字节流的桥梁:使用指定编码将写入流中字符编码成字节,在将字节写入输出流

  1. OutputStreamWriter 每次调用write()方法都会使用给定字符集对待输出字符编码,编码过程开销是很大的
  2. 为了获得最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器

1.4 BufferedWriter

抽象类Writer的实现类(如OutputStreamWriter )调用write()会其输出立即发送到底层字符或字节流,但是每次调用开销很大,建议用 BufferedWriter 包装所有其 write() 操作

  1. BufferedWriter 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
  2. BufferedWriter 缓冲区为字符数组,默认大小为8192
  3. Writer在clise()之前要调用flush(),将缓冲区中存在数据写入底层输入流

二. OutputStreamWriter输出过程

2.1 内存数据输出

Java内存中数据表现形式一般为字符,当将内存中字符数据输出到本地文件时就会用到OutputStreamWriter:

数据从内存中写入硬盘时,顺序是:
缓冲流 -> 转化流 -> 文件流
缓冲流是字符流
文件流是字节流
转化流就是OutputStreamWriter,所以OutputStreamWriter是字符流到字节流的桥梁

2.2 使用缓冲区

  1. OutputStreamWriter实例每次调用write()方法都会在给定字符(或字符集)上调用编码转换器,即将写入字符根据指定的字符集编码成字节,然后写入到底层输出流中
  2. 由于每次调用write()都会调用转换器,为了提高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中,以避免频繁调用转换器
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);

比如bufferWriter.write(“待输出”),bufferWriter会将字符串【待输出】缓存到缓冲区中,缓冲区是一个字符char数组,默认大小是8192

2.3 字符转字节输出

当缓冲区满了,将缓冲区传给底层输出流:nio处理
rt.jar sun.nio.cs.StreamEncoder

StreamEncoder.write(char cbuf[], int off, int len)

1.java.nio.CharBuffer - 字符缓冲区
2.java.nio.charset.CharsetEncoderencode(CharBuffer in, ByteBuffer out, boolean endOfInput) -  将输入字符缓冲区in中字符编码,得到的字节写入输出缓冲区out, 返回编码结果CoderResult
3.java.nio.charset.CoderResult - 编码结果状态的表述
4.sun.nio.cs.StreamEncoder.writeBytes() - 将字节输出缓冲区ByteBuffer中字节写入底层输出流

2.4 close()之前记得flush()

刷新该流的缓冲,防止缓冲区中还存在部分数据没有写入底层输出流

三. OutputStreamWriter输出实例

    @Test
    public void TestOutputStream() throws Exception {
        File file = new File("C:\\Users\\Administrator\\Desktop\\config.conf");
        OutputStream fileOutputStream = null;
        OutputStreamWriter outputStreamWriter = null;
        BufferedWriter bufferedWriter = null;
        try {
            fileOutputStream = new FileOutputStream(file);
            outputStreamWriter = new OutputStreamWriter(fileOutputStream, "GBK");
            bufferedWriter = new BufferedWriter(outputStreamWriter);
            bufferedWriter.write("Hello World");
            bufferedWriter.newLine();
            bufferedWriter.write("Hello Java");
            // close前调用flush()
            bufferedWriter.flush();
        } finally {
            try {
                if (bufferedWriter != null) {
                    bufferedWriter.close();                 
                }
            } catch (Exception e) {
            }
            try {
                if (outputStreamWriter != null) {
                    outputStreamWriter.close();
                }
            } catch (Exception e) {
            }
            try {
                if (fileOutputStream != null) {
                    fileOutputStream.close();
                }
            } catch (Exception e) {
            }

        }
    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194846.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 云计算适合什么企业_当前全球云计算处于发展

    云计算适合什么企业_当前全球云计算处于发展云计算时代:哪些企业适合上云?

    2022年4月21日
    60
  • 剑指offer:二进制中1的个数(Python)& 0xffffffff

    剑指offer:二进制中1的个数(Python)& 0xffffffff题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路思路1首先,这种基础的求二进制中1的个数的问题,对于强大的Python,一定存在一些好用的库函数。果不其然,代码如下:Python代码1defNumberOf1(self,n):ifn>=0:returnbin(n).count(‘1’)else…

    2022年5月17日
    28
  • pytest的使用_调用方法的具体调用格式为

    pytest的使用_调用方法的具体调用格式为Pytest执行用例规则Pytest在命令行中支持多种方式来运行和选择测试用例1.对某个目录下所有的用例pytest2.对模块中进行测试pytesttest_mod.py3.对文件夹进行

    2022年7月31日
    2
  • STM32看门狗配置说明

    STM32看门狗配置说明系统时钟:TheWWDGclockisprescaledfromtheAPBclockandhasaconfigurabletime-windowthatcanbeprogrammedtodetectabnormallylateorearlyapplicationbehavior./**@defgroupWWDG_PrescalerWWDGPrescaler*@{*/#defineWWDG_PRESCALER_10x

    2022年5月3日
    44
  • vue中的双向数据绑定原理_vue nodejs

    vue中的双向数据绑定原理_vue nodejs简述    每当面试官问到Vue数据双向绑定原理的时候,我们都会简单的说:Vue内部通过Object.defineProperty方法属性拦截的方式,把data对象里每个数据的读写转化成getter/setter,当数据变化时通知视图更新。虽然一句话把大概原理概括了,但是其内部的实现方式还是值得深究的,本文就以通俗易懂的方式剖析Vue内部双向数据绑定原理的实现过程思路   …

    2022年10月9日
    0
  • h5实现长按复制文本_复制css

    h5实现长按复制文本_复制css复制2333333<style> p{ -webkit-user-select:none; user-select:none; } p>i{ -webkit-user-select:text; user-select:text; } </style> <p>长按复制短码<i>23…

    2022年9月27日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号