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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于学习的名言_classnotdeffounderror

    关于学习的名言_classnotdeffounderror 现在java编程中经常碰到ClassCastException错误,ClassCastException是JVM在检测到两个类型间的转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。本模式试图为您提供了解和排除ClassCastException错误最常见成因的一些基本要素。为什么发生此问题?在执行几乎任何子系统(Web容器、EJB、JCA、群集等)的应用程序代码或…

    2025年10月16日
    5
  • linux 进入编辑文件,保存退出相关命令「建议收藏」

    linux 进入编辑文件,保存退出相关命令「建议收藏」1.进入文件vim文件名(vimtest.txt)2.编辑完成之后,按ESC键跳到命令模式(命令前面冒号是必要的):  :w保存文件但不退出vi  :wfile将修改另外保存到file中,不退出vi  :w!强制保存,不推出vi  :wq保存文件并退出vi  :wq!强制保存文件,并退出vi  :q不保存文件,退出vi…

    2022年9月28日
    3
  • git pull的时候发生冲突的解决方法之“error: Your local changes to the following files would be overwritten by merge

    git pull的时候发生冲突的解决方法之“error: Your local changes to the following files would be overwritten by merge

    2022年2月18日
    46
  • 多重共线性VIF

    多重共线性VIF多重共线性是指自变量之间存在线性相关关系,即一个自变量可以是其他一个或几个自变量的线性组合。方差膨胀系数(varianceinflationfactor,VIF)是衡量多元线性回归模型中复(多重)共线性严重程度的一种度量。它表示回归系数估计量的方差与假设自变量间不线性相关时方差相比的比值。多重共线性是指自变量之间存在线性相关关系,即一个自变量可以是其他一个或几个自变量的线性组合。检验方法主要有:容忍度(Tolerance)和方差膨胀系数(Varianceinflationfactor,

    2022年4月29日
    116
  • 如何进行大数据处理?大数据处理的方法步骤[通俗易懂]

    如何进行大数据处理?大数据处理的方法步骤[通俗易懂]1.大数据处理之一:采集大数据的采集是指利用多个数据库来接收发自客户端(Web、App或者传感器形式等)的数据,并且用户可以通过这些数据库来进行简单的查询和处理工作。比如,电商会使用传统的关系型数据库MySQL和Oracle等来存储每一笔事务数据,除此之外,Redis和MongoDB这样的NoSQL数据库也常用于数据的采集。在大数据的采集过程中,其主要特点和挑战是并发数高,因为同时有…

    2022年5月16日
    75
  • 计算机的发展历史_计算器的由来和故事

    计算机的发展历史_计算器的由来和故事本文主要介绍计算机的发展历史。1概述计算工具的演化经历了由简单到复杂、从低级到高级的不同阶段,从“结绳记事”中的绳结到算筹、算盘、计算尺、机械计算机等,它们在不同的历史时期发挥了各自的历史作用,同时也启发了现代电子计算机的研制思想。1889年,美国科学家赫尔曼·何乐礼研制出以电力为基础的电动制表机,用以储存计算资料。1930年,美国科学家范内瓦·布什造出世界上首台模拟电子计算机。…

    2022年8月31日
    1

发表回复

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

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