JAVA基础14:字节缓冲区,编码解码问题,字符流,字符流缓冲区

关于字节输入流的缓冲区的 api BufferedInputStream字节输入输出流的缓冲区的使用和规则 立即下载
package com.i;

import java.io.*;

public class Test_buffer {
    /**
     * 字节缓冲区流:缓冲区的构造方法只是为字节流提供了一个缓冲区,底层还是由字节流来完成读写
     *      BufferedOutputStream:
     *      BufferedInputStream:
     *
     *      构造方法:
     *      public BufferedOutputStream(OutputStream out,
     *                             int size)
     *      创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。
     *
     *      底层代码如下:
     *      public BufferedOutputStream(OutputStream out) {
     *         this(out, 8192);
     *     }
     *
     *
     */
    public static void main(String[] args) throws FileNotFoundException {

        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("bb.txt"));
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("bb.txt"));

    }
}

编码解码概述图:

 

package com.i;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;

public class Test_liu {
    /**
     * 字节流读取数据可能出现的问题:
     *          汉字占两个字节。一个字节一个字节读取在控制台输出会无法识别出这是个汉字。
     *
     *          文件的复制一个一个字节复制却可以得到汉字的原因:计算机底层会根据字节进行拼接,得到汉字。
     *
     *          汉字的存储规则:第一个字节一定是负数,第二个可能是负数也可能是正数,大部分情况下是负数。
     *
     *  编码表:看图
     *
     *  String的编码和解码:
     *          不加参数使用的是平台自己的编码格式
     *          编码:byte[] bys = str.getBytes(StandardCharsets.ISO_8859_1);
     *          解码:new String(bys,StandardCharsets.UTF_8)
     *
     *  转换流中的解码和编码问题:
     *          转换流其实就是一个字符流。
     *          转换流=字节流+编码表
     *
     *          输入输出流使用方法:
     *          OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("aa.txt"),“US_ASCII”);
     *          InputStreamReader isr = new InputStreamReader(new FileInputStream("aa.txt"),"UTF-8");
     *
     */

    public static void main(String[] args) throws IOException {
//        String str = "你好啊";
//        byte[] bys = str.getBytes(StandardCharsets.UTF_8);
//
//        System.out.println(Arrays.toString(bys));

        String str = "你好";

        //[-28, -67, -96, -27, -91, -67]   说明平台默认的编码格式是UTF-8
//        byte[] bys = str.getBytes();
        //[63, 63]
//        byte[] bys = str.getBytes(StandardCharsets.ISO_8859_1);
//        System.out.println(Arrays.toString(bys));
//        System.out.println(new String(bys,StandardCharsets.UTF_8));

        //不使用默认UTF-8写入为乱码
//        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("aa.txt"),StandardCharsets.US_ASCII);
//        osw.write("你好2");

        //使用对应编码读数据
        InputStreamReader isr = new InputStreamReader(new FileInputStream("aa.txt"),"UTF-8");
//
        int in;
        while(-1 != (in = isr.read()) ){
            System.out.println("----------------------------");
            System.out.println((char)in);
        }
//        osw.close();
        isr.close();

    }
}

-----------字符流

package com.i;

import java.io.*;

public class Test_writer {
    /**
     *字符流写入的方法:
     *          osw.write(97);
     *         osw.write('b');
     *         osw.write(new char[]{'a', 'b', 'c', 'd', 'e'});
     *         osw.write(new char[]{'a','b','c','d','e'},1,3);
     *         osw.write("abcde");
     *         osw.write("abcde",0,3);
     *
     *         字符流需要刷新的大概原因:一般字符占两个字节,无法判断最后一个字符是否只写了一半,系统不会对文件进行刷新,需要手动刷新。
     *         osw.flush();
     *
     *         osw.close();关闭字符流里默认调用了flush();
     *
     * 字符流读数据的两种方法(主要目的复习):
     *          int i;
     * //        while(-1!=(i=isr.read())){
     * //            System.out.print((char)i);
     * //        }
     *             char[] cs = new char[1024];
     *             int len;
     *             while(-1 != (len = isr.read(cs))){
     *                 System.out.print(new String(cs,0,len));
     *             }
     */
    public static void main(String[] args) throws IOException {
//        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("abb.txt"));
//        osw.write(97);
//        osw.write('b');
//        osw.write(new char[]{'a', 'b', 'c', 'd', 'e'});
//        osw.write(new char[]{'a','b','c','d','e'},1,3);
//        osw.write("abcde");
//        osw.write("abcde",0,3);
//        osw.flush();
//        osw.close();

        InputStreamReader isr = new InputStreamReader(new FileInputStream("src/Test/Test_Students_Test.java"));
//        int i;
//        while(-1!=(i=isr.read())){
//            System.out.print((char)i);
//        }
            char[] cs = new char[1024];
            int len;
            while(-1 != (len = isr.read(cs))){
                System.out.print(new String(cs,0,len));
            }
        isr.close();

    }
}

----字符流缓冲区

package com.i;

import java.io.*;

public class Test_zfbuffer {
    /**
     * 字符缓冲区流:
     *           BufferedReader br = new BufferedReader(new FileReader(""));
     *         BufferedWriter bw = new BufferedWriter(new FileWriter(""));
     *
     * 字符流缓冲区的特殊功能:
     *          BufferedWriter:new Line();//根据操作系统自动加上换行
     *                  for (int i=0;i<3;i++){
     * //            bw.write("Hello"+i);
     * //            bw.newLine();//根据操作系统自动加上换行
     * //            bw.flush();//一般写一行刷新一下,方便确认数据
     * //               }
     *
     *          public String readLine()
     *                 throws IOException
     * 读一行文字。 一行被视为由换行符('\ n'),回车符('\ r')中的任何一个或随后的换行符终止。
     * 结果
     * 包含行的内容的字符串,不包括任何行终止字符,如果已达到流的末尾,则为null
     */
    public static void main(String[] args) throws IOException {

//        BufferedWriter bw = new BufferedWriter(new FileWriter("aa.txt"));
//
//        for (int i=0;i<3;i++){
//            bw.write("Hello"+i);
//            bw.newLine();//根据操作系统自动加上换行
//            bw.flush();//一般写一行刷新一下,方便确认数据
//        }
//
//        bw.close();

        BufferedReader br = new BufferedReader(new FileReader("aa.txt"));

        String str;
        while((str = br.readLine()) != null){
            System.out.println(str);//
        }
        br.close();


    }
}
self‑improving‑agent 安装与配置指南(OpenClaw) 长期记忆错误反思用户偏好学习持续进化AI → 反思 → 学习 → 改进。 阅读详情

相关推荐

虚幻引擎5 AR开发教程02:构建和测试AR Android App

在本教程中,我们将学习如何在虚幻引擎 5 上构建和测试 AR 安卓应用。

mopanchun的博客 2650

字节缓冲区ByteBuffer

ByteBuffer其实就是一个字节缓冲区, 在这里你可以对缓冲区的数据进行 字节级的操作. 这样的好处在于你可以比较方便的获取到底层的字节操作和字节数据. 比如你有一个int型数据, 而你想获取他的byte[]数组, 你可以这样做:ByteBuffer buffer = ByteBuffer.allocate(1024); //分配一定的空间,1024int i = 90;buffer.put...

一元钱计划 381

从模组到集装箱:手把手拆解一个储能BMS的软硬件架构设计与通信组网

本文深入解析储能BMS的软硬件架构设计与通信组网,从电芯采样到系统集成的全链条技术实现。详细介绍了三级硬件架构(AFE、CMU、BMU)的设计要点,以及软件分层实现中的驱动层、应用层核心算法和通信协议栈。通过实战案例分享CAN网络搭建、调试工具链和系统验证测试经验,为储能系统开发提供实用指导。

weixin_30752699的博客 462

Netty 源码分析系列(六)字节缓冲区 ByteBuf(上)

网络数据传输的基本单位是字节,缓冲区就是存储字节的容器。在存取字节时,会先把字节放入缓冲区,再在操作缓冲区实现字节的批量存储以提升性能。Java NIO 提供了ByteBuffer作为它的缓冲区,但是这个类用起来过于复杂,而且也有些繁琐。因此,Netty 自己实现了ByteBuf以替代ByteBuffer。本篇文章就来介绍Netty自己缓冲区的作用。本文首先展示了ByteBuffer在写入模式和读取模式下内部的一个状态,然后分析了clear()与compact()方法的源码,最后讲解了。

初念初恋的博客 1939

京东联盟API实战:5分钟搞定商品返利链接生成(附Python代码)

本文详细介绍了如何利用京东联盟API快速构建自动化商品返利链接生成系统。通过Python代码实战,从API申请、环境配置到核心功能封装,手把手教你实现批量商品信息查询与推广链接生成,帮助内容创作者和开发者大幅提升电商推广效率。

weixin_29216957的博客 673

别再手动切换了!用SP3485+三极管搞定RS485自动收发电路(附完整原理图)

本文详细介绍了如何利用SP3485芯片和三极管设计RS485自动收发电路,解决传统手动切换带来的IO资源占用和软件复杂度问题。通过原理分析、电路设计拆解和实战注意事项,帮助工程师打造稳定可靠的自动收发通信模块,显著提升系统性能和可靠性。

weixin_26833939的博客 512

io.netty学习(六)字节缓冲区 ByteBuf(上)

网络数据传输的基本单位是字节,缓冲区就是存储字节的容器。在存取字节时,会先把字节放入缓冲区,再在操作缓冲区实现字节的批量存储以提升性能。Java NIO 提供了ByteBuffer作为它的缓冲区,但是这个类用起来过于复杂,而且也有些繁琐。因此,Netty 自己实现了ByteBuf以替代ByteBuffer。本篇文章就来介绍Netty自己缓冲区的作用。本文首先展示了ByteBuffer在写入模式和读取模式下内部的一个状态,然后分析了clear()与compact()方法的源码,最后讲解了。

码灵的博客 1260

Dinic算法的复杂度分析及证明

一般图 复杂度主要取决于dfs增广的过程。 将dfs部分的复杂度分成两部分来分析:1)修改增广路上边的流量。至多会增广mmm次,一条增广路的长度至多是nnn,所以这一部分的复杂度是O(nm)O(nm)O(nm)。2)dfs遍历时找增广路失败时经过的边。由于一旦从某条边出发找最短路失败了,我们就不会再走那条边(当前弧优化),所以这一部分的复杂度是O(m)O(m)O(m)的。故而dfs增广的复杂度是O...

这个博客已经搬到了:zhongyuwei.github.io 4391

Java 字节区/字符区缓冲流

字节区缓冲流和字符区缓冲流的应用

等,一起的博客 649

UniApp实现多端支付功能完整实现指南

支付业务流程多端支付实现安全性保障异常处理最佳实践支付基础知识多端支付实现统一支付封装安全性处理异常处理最佳实践根据具体业务场景选择合适的支付方式注重安全性和用户体验做好异常处理和日志记录持续优化和改进支付流程关注我,持续分享前端项目开发经验!

weixin_63454527的博客 2128

从零打造音乐会级特雷门琴:原理、设计与调试全解析

电子乐器的工作原理通常基于信号生成与调制。特雷门琴作为世界上最早的电子乐器之一,其核心原理是利用射频振荡器和电容传感,将演奏者的手势变化转化为音高与音量信号。这种技术通过外差式混频实现音高控制,并利用压控放大器实现细腻的音量动态,其工程价值在于将抽象的空间位置信息精确映射为连续的音频参数。在音乐制作、声音艺术和交互装置等领域,这类技术为创造独特的演奏体验提供了基础。本文聚焦于如何从电路层面实现一台高稳定性的特雷门琴,详细阐述了从LC振荡器设计、天线场形优化到音色混合检波等关键环节,并分享了基于LTspice

weixin_34046298的博客 171

【Netty】字节缓冲区 ByteBuf (六)(上)

Netty 概述(一)Netty 架构设计(二)Netty Channel 概述(三)Netty ChannelHandler(四)ChannelPipeline源码分析(五)网络数据传输的基本单位是字节,缓冲区就是存储字节的容器。在存取字节时,会先把字节放入缓冲区,再在操作缓冲区实现字节的批量存储以提升性能。Java NIO 提供了ByteBuffer 作为它的缓冲区,但是这个类用起来过于复杂,而且也有些繁琐。因此,Netty 自己实现了 ByteBuf 以替代 ByteBuffer。

DreamSun的博客 3182

支付宝域名如何加入白名单(扫码老是弹窗)

支付宝扫码之后,遇到非支付宝官方网页,请确认是否继续访问弹窗,问题解决办法。本章教程提供解决办法,亲测有效。

猿小白的博客 9194

Java18-day09【字节缓冲流、字符流、编码表、字符串与字符流中的编码解码问题、字符流读写数据的方式、字符缓冲流、IO流小结】

2.7、字节缓冲流 3.1、为什么出现字符流 3.2、编码表 3.3、字符串中的编码解码问题 3.4、字符流中的编码解码问题 3.5、字符流写数据的5种方式 3.6、字符流读数据的2种方式 3.7、字符缓冲流 3.8、字符缓冲流特有功能 3.9、IO流小结 案例:复制视频 案例:复制Java文件 案例:集合到文件 案例:文件到集合 案例:点名器

upward 989

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

字节流&编码&字符流&底层实现

本文系统介绍了Java IO流的使用方法,包括字节流和字符流的基本操作。主要内容涵盖:IO流的分类体系结构,纯文本文件与字节流的区别;字节输出流的创建、写入和释放资源;字节输入流的读取方法和文件拷贝实现;字符集编码原理及中文乱码问题;字符流与字节流的区别及适用场景。文章详细讲解了各种IO操作的标准写法,并分析了常见问题的原因,如中文乱码的产生机制。通过具体代码示例演示了文件读写、换行、续写等常见操作,为系统学习Java IO流提供了实用指导。

duayulon的博客 738

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java学习笔记 day14 字节流、字符流

java学习笔记 day14 字节流、字符流1. 缓冲字节流2.转换流-中文处理2.1 编码表概述和常见编码表2.2 转换流3 便捷类4. 字符缓冲区流 1. 缓冲字节流 字符缓冲区流: BufferedWriter: 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。 构造方法: BufferedWriter(Writer out) BufferedReader: 从字符输入流中读取文本,

KKT 160

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JAVA中字符流详解

字符流:就是在字节流的基础上,加上编码,形成的数据流 字符流出现的意义:因为字节流在操作字符时,可能会有中文导致的乱码,所以由字节流引申出了字符流。 字符输入流:Reader 常用子类:FileReader 文件字符输入流常用方法: read(); read(char[ ]); read(char[ ] ,offset,len); 字符输出流: Writer 常用子类:文件字符输出流: Filew...

qq_38830041的博客 244

java编程基础_14

文章目录字节缓冲区流字节流四种方式编码表String类中的编码解码转换流字符流FileWriter和FileReader字符流缓冲区流字符缓冲区流特殊功能字符流练习把集合中的学生对象数据存储到文本文件把文本文件中的学生对象数据读取到集合 字节缓冲区流 字节缓冲区流作用: 字节流一次读写一个数组的速度比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果,java本身在设计的时候,也考虑到了这样的设计思想,所以提供了字节缓冲区流。 字节缓冲流 : BufferedOutputStream:字节缓冲输出

Latterain的博客 218

java bufferwrite_Java IO6:字符流进阶及BufferWriter、BufferReader

标签:字符流和字节流的区别拿一下上一篇文章的例子:1 public static void main(String[] args) throwsException2 {3 File file = new File("D:/writer.txt");4 Writer out = newFileWriter(file);5 //声明一个String类型对象6 Strin...

weixin_31578739的博客 383

JAVA重点基础、进阶知识及易错点总结(14)字节流 & 字符流

Java IO流核心摘要 字节流(InputStream/OutputStream)适用于所有文件类型,处理二进制数据;字符流(Reader/Writer)专为文本设计,自动处理编码。关键区别: 字节流处理8位字节,需手动处理编码,适合图片/视频等二进制文件 字符流处理16位Unicode字符,自动编解码,有效避免中文乱码 最佳实践: 文件复制使用字节流+缓冲数组(8-16KB) 文本处理推荐InputStreamReader+显式指定UTF-8编码 必须用try-with-resources自动关闭流 写

qq_52071206的博客 589

bufferedreader_Java IO字符流和字节流的区别及BufferedWriter、BufferedReader

一、字符流和字节流的区别拿一下上一篇文章的例子: 1 package com.demo.io; 2 3 import java.io.File; 4 import java.io.FileReader; 5 import java.io.FileWriter; 6 import java.io.Reader; 7 import java.io.Writer; 8 9 public class ...

weixin_39785858的博客 435

java 字符流_JAVA中字符流详解

字符流:就是在字节流的基础上,加上编码,形成的数据流字符流出现的意义:因为字节流在操作字符时,可能会有中文导致的乱码,所以由字节流引申出了字符流。字符输入流:Reader常用子类:FileReader文件字符输入流常用方法:read();read(char[ ]);read(char[ ] ,offset,len);字符输出流: Writer常用子类:文件字符输出流: Filewriter文件字符...

weixin_42299801的博客 335

JavaSE学习14(IO流 字符流,特殊操作流)

3.字符流 3.1 为什么会出现字符流 由于字节流操作中文不是特别方便,所以Java提供了字符流 字符流 = 字节流 + 编码表 汉字在存储的时候,无论选择哪种编码存储,第一个字节都是负数 3.2 编码表 基础知识: 计算机中存储的信息都是二进制数表示的,我们看到的英文 汉字等字符 都是二进制转换成的 按照某种规则,将字符存储到计算机中,称为编码。反之,将二进制解析显示出...

weixin_44643735的博客 163

java笔记(14)IO(下)

文章目录第一章字节缓冲流1.1字节缓冲区流的概述和使用1.1.1 字节缓冲流的作用是?1.1.2 为什么字节缓冲流的构造方法需要传入一个OutputStream1.1.3 案例代码1.2 字节流四种方式复制AVI并测试效率1.2.1 方法摘要1.2.2 案例代码第二章转换流2.1 转换流出现的原因2.1.1字节流读数据可能出现问题2.1.2 案例代码2.1.3 转换流的组成部分2.2 编码表概述和常见编码表2.2.1 什么是编码表?2.2.2 乱码问题2.3 String类中的编码和解码问题2.3.1 方法

yyuan_in的博客 437

java基础笔记第14天

第14天 IO流第一章 字节缓冲流1.1字节缓冲区流的概述和使用1.1.1 字节缓冲流的作用是?1.1.2 为什么字节缓冲流的构造方法需要传入一个OutputStream1.1.3 案例代码1.2 字节流四种方式复制AVI并测试效率1.2.1 方法摘要1.2.2 案例代码第二章 转换流2.1 转换流出现的原因2.1.1字节流读数据可能出现问题2.1.2 案例代码2.1.3 转换流的组成部分2.2 编码表概述和常见编码表2.2.1 什么是编码表?2.2.2 乱码问题2.3 String类中的编码和解码问题2.

qq_38067916的博客 161

Java IO学习【15】字节流和字符流转换&小注意点

看到\r\n这么复杂的编程就会想到readLine的方法,但在字节流InputStream里面是没有这个方法的,这个方法只有字符流BufferedReader里面有,然而字符流装饰不了字节流,所以就需要转换。所以我们就在字符流子类对象里面找到了InputStreamReader(字节流+字符流),这就是字节和字符转换方式。InputStreamReader 是字节流通向字符流的桥梁!同时类似的就有字符流向字节流的转换。

linweieran的博客 687
上一篇: JAVA基础13_异常处理,File类,IO流,输入流比较标准的写法
下一篇: JAVA基础复习
RZH_long
博客等级 码龄6年 17粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值