如何正确计算文本所占字节数

计算文本(字符串)所占字节数,大家第一个想到的应该就是String类的getBytes()方法,该方法返回的是字符串对应的字节数组,再计算数组的length就能够得到字符串所占字节数。例如:
public static void main(String []args)  {
// 运行结果:12
System.out.println("旭日东升".getBytes().length);
}
上面的示例中计算了四个个中文所占的字节数为12,即一个汉字占3个字节。真的是这样吗?其实我们忽略了一个问题:对于不同的编码方式,中文所占的字节数也不一样!这到底要怎么呢?在上面的例子中,我们并没有指定编码方式,那么会使用默认的编码方式。先来看我得出的三条结论:
1)如果上面的例子运行在默认编码方式为ISO8859-1的操作系统平台上,计算结果是4;
2)如果上面的例子运行在默认编码方式为gb2312或gbk的操作系统平台上,计算结果是8;
3)如果上面的例子运行在默认编码方式为utf-8的操作系统平台上,计算结果是12;
如果真的是这样,是不是意味着String.getBytes()方法在我们的系统平台上默认采用的是utf-8编码方式呢?我们再来看一个例子:
public static void main(String []args) throws UnsupportedEncodingException  {
// 运行结果:4
System.out.println("旭日东升".getBytes("ISO8859-1").length);
// 运行结果:8
System.out.println("旭日东升".getBytes("GB2312").length);
// 运行结果:8
System.out.println("旭日东升".getBytes("GBK").length);
// 运行结果:12

System.out.println("旭日东升".getBytes("UTF-8").length);

}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用字节流读取文本文件需要使用FileInputStream类。首先,我们需要创建一个FileInputStream对象,并传入要读取的文本文件的路径作为参数。然后,我们可以使用read()方法来逐个字节地读取文件内容,并使用System.out.print()方法来打印每个字节的内容。 在读取过程中,我们可以使用一个byte型的变量来接收每个字节,并使用一个计数器变量来统计读取的字节数。在读取完成后,我们可以使用System.out.println()方法来打印出总的字节数。 在操作过程中,我们需要使用try catch语句来捕捉可能发生的异常。可能的异常包括文件不存在的FileNotFoundException和IO读取错误的IOException。在catch块中,我们可以打印错误信息或进行其他的异常处理操作。 以下是一个示例代码: ``` import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; public class FileByteStreamExample { public static void main(String[] args) { String filePath = "文件路径"; FileInputStream fis = null; try { fis = new FileInputStream(filePath); int byteRead; int byteCount = 0; while ((byteRead = fis.read()) != -1) { System.out.print((char) byteRead); byteCount++; } System.out.println("总字节数: " + byteCount); } catch (FileNotFoundException e) { System.out.println("文件不存在"); e.printStackTrace(); } catch (IOException e) { System.out.println("读取错误"); e.printStackTrace(); } finally { try { if (fis != null) { fis.close(); } } catch (IOException e) { System.out.println("关闭文件流失败"); e.printStackTrace(); } } } } ``` 注意,代码中的"文件路径"需要替换为实际的文本文件路径。另外,在finally块中,我们使用close()方法来关闭文件流,确保资源的正确释放。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值