java 如何使用RandomAccessFile多线程写入带有中文字符的字符串
发布网友
发布时间:2022-05-06 07:49
我来回答
共1个回答
热心网友
时间:2023-10-08 17:52
读写汉字和多线程本身没有直接关联,汉字读写涉及到字符集编码,而多线程读写同一个文件则涉及到线程同步访问。
去了解一下字符集编码是什么意思。
一个汉字它是多个字节的,要把它保存在磁盘上这种“有序列的”存储形式中,我们需要告诉电脑,高字节在前面还是在后面 (比如 1234567890,我们写的时候是高字节在前面,保存到磁盘上时也一样需要说明),还要告诉将来读取这个文件的软件,哪几个字节拼在一起是一个汉字,怎么把英文字母符号和汉字有效的区分开来,不至于拿半个汉字和另一个英文字母来拼成汉字。
为了解决这些问题就有了字符集编码的技术。
在 Java 中,磁盘读写及网络通信都是 byte,就是字节,有序的,一个个来,但表示*类识别的字符需要转换成 String 或 char,这个转换过程涉及到字符集编码方案。
比如:
String a = "汉字";
FileOutputStream output = new FileOutputStream("a.txt");
output.write(a.getBytes("GB18030");
output.close();
FileInputStream input = new FileInputStream("a.txt");
byte[] content = new byte[128];
int count = input.read(content);
System.out.println("Read :" + new String(content, 0, count, "GB18030");
我们始终需要明确的指定字符集,这样的软件才能在全球各地使用,不指定字符集的可能只能处理同一个地方使用的文件,比如,在中国*只保存到磁盘上的文件拿到香港机器去读取可能就出错了,我们至少要把字符集单独放置在某个地方当成一个软件配置参数。