字节流和字符流

读文件:

    public void readFile(){
        File f=new File("d:\\data.txt");
        try {
            InputStream in=new FileInputStream(f);
            int len=(int) f.length();
            byte[] b=new byte[len];
            in.read(b);
            in.close();
            String str=new String(b);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

写文件:

    public void writeFile(){
        File f=new File("d:\\data.txt");
        try {
            OutputStream out=new FileOutputStream(f);
            String str="hello ppa";
            byte[] b=str.getBytes();
            out.write(b);
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

字节流:
OutputStream,FileOutputStream
InputStream,FileInputStream

字符流:
Writer,FileWriter
Reader,FileReader

转换流:
InputStreamReader:是Reader子类,将字节流转换为字符流读出。

    public void readerFile() throws IOException{
        File f=new File("d:\\data.txt");
        Reader in=new InputStreamReader(new FileInputStream(f));
        char c[]=new char[1024];
        int len=in.read(c);
        in.close();
        String str=new String(c,0,len);
    }

OutputStreamWriter:是Writer子类,将字符流转换为字节流写入;

    public void writerFile() throws IOException{
        File f=new File("d:\\data.txt");
        Writer out=new OutputStreamWriter(new FileOutputStream(f));
        out.write("hello ppa");
        out.close();
    }

字符缓冲类:BufferedReader

    public void bufferReader(){
        BufferedReader buf=null;
        buf=new BufferedReader(new InputStreamReader(System.in));
        String str=null;
        try {
            str=buf.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
内容概要:本文档为《400_IB Specification Vol 2-Release-2.0-Final-2025-07-31.pdf》,主要描述了InfiniBand架构2.0版本的物理层规范。文档详细规定了链路初始化、配置训练流程,包括但不限于传输序列(TS1、TS2、TS3)、链路去偏斜、波特率、前向纠错(FEC)支持、链路速度协商及扩展速度选项等。此外,还介绍了链路状态机的不同状态(如禁用、轮询、配置等),以及各状态下应遵循的规则命令。针对不同数据速率(从SDR到XDR)的链路格式化规则也有详细说明,确保数据包格式控制符号在多条物理通道上的一致性正确性。文档还涵盖了链路性能监控错误检测机制。 适用人群:适用于从事网络硬件设计、开发及维护的技术人员,尤其是那些需要深入了解InfiniBand物理层细节的专业人士。 使用场景及目标:① 设计实现支持多种数据速率编码方式的InfiniBand设备;② 开发链路初始化训练算法,确保链路两端设备能够正确配置并优化通质量;③ 实现链路性能监控错误检测,提高系统的可靠性稳定性。 其他说明:本文档属于InfiniBand贸易协会所有,为专有息,仅供内部参考技术交流使用。文档内容详尽,对于理解实施InfiniBand接口具有重要指导意义。读者应结合相关背景资料进行学习,以确保正确理解应用规范中的各项技术要求。
### Java 字节流字符流的区别及用法场景 #### 一、定义上的差异 字节流字符流的主要区别在于其处理的数据单位不同。字节流以 `8位`(即一个字节)为单位进行数据传输,适用于任何类型的二进制数据,如图片、音频文件等[^1]。而字符流则专门用于处理文本数据,它以 `16位` Unicode 字符为单位进行操作,能够自动完成字符集转换,从而简化了文本文件的读写过程[^2]。 #### 二、继承体系的不同 在 Java 的 I/O 类库中,字节流的核心抽象基类是 `InputStream` `OutputStream`,所有具体的字节流都派生于这两个类。此相对应的是字符流,它的核心抽象基类分别是 `Reader` `Writer`。因此,在选择使用何种流时,可以根据具体需求决定是否需要支持字符编码转换[^3]。 #### 三、适用场景分析 - **字节流的应用** - 当涉及非文本型数据的操作时,比如图像文件 (.jpg, .png),视频文件 (.mp4) 或者其他二进制格式 (如 `.class`, `.exe`) 文件,则应该选用字节流来进行处理[^4]。 - **字符流的应用** - 对于纯文本文件或者需要考虑特定编码方式的情况,例如 XML 文档、JSON 数据或是普通的 UTF-8 编码文本文件,推荐采用字符流以便更方便地管理字符串并避免潜在的编码错误。 #### 四、两者之间的联系 尽管二者存在上述显著差别,但在某些情况下可能还需要互相配合工作。例如当从网络接收到原始字节数组却希望将其解释成某种指定编码的文字串的时候;或者是反过来要把一段文字按照给定编码转回对应的字节数组再发送出去的情形下,就可以借助桥接器类——`InputStreamReader` 及 `OutputStreamWriter` 实现这种转换关系。 ```java // 使用 InputStreamReader 将字节流转换为字符流的例子 InputStream inputStream = new FileInputStream("example.txt"); Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8); // 使用 OutputStreamWriter 将字符流转回字节流的例子 OutputStream outputStream = new FileOutputStream("output.txt"); Writer writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8); ``` #### 五、性能考量 由于每次调用字符流方法内部都会经历一次额外的字符编码/解码过程,所以在追求极致速度的情况下可能会稍微逊色一点于直接操作底层字节的方式。不过对于大多数日常应用而言,这点开销完全可以忽略不计,并且利用好高级别的封装反而有助于减少程序复杂度以及提高可维护性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值