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


相关推荐

  • log4cxx–使用多个logger「建议收藏」

    log4cxx–使用多个logger「建议收藏」转载自:http://blog.csdn.net/crazyhacking/article/details/9668267使用多个logger时,所有logger的配置写在一个配置文件里面两个例子:1一个继承的例子(http://logging.apache.org/log4cxx/)//filecom/foo/bar.h#include”log4cxx/log

    2022年6月16日
    54
  • 微信开放平台PC端扫码登录功能个人总结

    微信开放平台PC端扫码登录功能个人总结最近公司给我安排一个微信登录的功能,需求是这样的:  1.登录授权    点击二维码图标后,登录界面切换为如下样式(二维码),微信扫描二维码并授权,即可成功登录;      若当前账号未绑定微信账号,扫描后提示“您的账号未绑定微信号,请先登录绑定”;      点击“返回”按钮,界面切换为账号密码登录;      若微信号绑定多个账号在,则展示所绑定全部账号的用户名…

    2022年4月29日
    146
  • 怎么完全卸载赛门铁克_Symantec卸载方法,赛门铁克卸载「建议收藏」

    怎么完全卸载赛门铁克_Symantec卸载方法,赛门铁克卸载「建议收藏」1、首先在服务里面设置所有Symantec开头的系统服务为禁止(控制面板-管理工具-服务),重启后在命令行运行:smc-stop;(stop需要密码就关掉先)2、删除HKEY_LOCAL_MACHINE/SOFTWARE/Symantec/SymantecEndpointProtection/SMC下的SmcInstData子键;(删除后F5刷新下,如果这个子键又自己出现了,说明有Syman…

    2022年4月27日
    123
  • Asp.Net Core 使用Quartz基于界面画接口管理做定时任务

    Asp.Net Core 使用Quartz基于界面画接口管理做定时任务

    2021年6月8日
    123
  • 编程中变量命名方法:驼峰命名法?

    编程中变量命名方法:驼峰命名法?nbsp nbsp nbsp nbsp 前几日在浏览关于 python 的博客时 无意中看到了驼峰命名法 百度后顿时恍然大悟 了结了自己的一桩心病 以前一直有疑问别人为什么这么命名 他们的理论依据是什么 nbsp nbsp nbsp nbsp 骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起 而构成的唯一识别字时 第一个单词以小写字母开始 第二个单词的首字母大写或每一个单词的首字母都采用大写字母 例如 myFirstName myLas

    2026年1月22日
    1
  • mysql时间戳格式转换日期格式字符串

    mysql时间戳格式转换日期格式字符串1.测试表表结构CREATETABLE`timestamp_string_change`(`id`intNOTNULLAUTO_INCREMENT,`up_time`timestampNULLDEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=2DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ci;2.mysql时间戳格式转字符串方法1

    2022年6月21日
    163

发表回复

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

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