字节流读取中文(如何处理)

本文介绍了一个Java程序示例,展示了如何使用字节流读取包含中英文混合内容的文件,并处理不同编码方式下的中文显示问题。程序通过FileInputStream读取文件内容,并根据文件的实际编码方式正确解析中文字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package lesson.ls02;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

import lesson.SD;

// 字节流读取中文(如何处理)
public class IO05 {
    public static void main(String[] args){
        String child = "io" + SD.S_F + "io02" + SD.S_F + "100.txt";
        File file = new File(SD.D_W, child);
        FileInputStream input = null;
        try {
            input = new FileInputStream(file);
            // read(byte[] b)
            // 1)一次最多读取b.length个字节(最后一次的读取长度为<=length)
            // 2)读取的返回值是int类型的 读取的字节长度
            // 3)没有数据可读是,返回-1
            // 4)读取到的数据直接存储到byte[]中
            int len = 0;
            // ①
            // 200.txt用utf-8编码规则,汉字占3个字节
            // byte[] res = new byte[3];
            // ② 
            // 300.txt用GBK编码规则,汉字占2个字节
            // byte[] res = new byte[2];
            // ③
            // 100.txt中英文共存,如何定义byte[]一次读取的字节大小
            // ③
//          ArrayList<Integer> ls = new ArrayList<Integer>();
            byte[] res = new byte[(int) (file.length())];
            while ((len = input.read(res)) != -1) {
//              System.out.println(len);
                // ① MacOS系统默认编码,可以省略utf8
                // System.out.print(new String(res, "utf8"));
                // ②
                // System.out.print(new String(res, "GBK"));
                // ③
//              for (int i = 0; i < len; i++) {
//                  ls.add(Integer.valueOf(res[i]));
//              }
                System.out.print(new String(res));
            }
            // ③
//          byte[] result = new byte[ls.size()];
//          for (int i = 0; i < result.length; i++) {
//              result[i] = ls.get(i).byteValue();
//          }
//          System.out.println(new String(result));
        } catch (FileNotFoundException e) {
            System.err.println("异常 - FileNotFoundException");
        } catch (IOException e) {
            System.err.println("异常 - FileNotFoundException");
        }

        try {
            if (input != null) 
                input.close();
        } catch (IOException e) {
            System.err.println("异常 - IOException");
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值