1个回答
展开全部
读写汉字和多线程本身没有直接关联,汉字读写涉及到字符集编码,而多线程读写同一个文件则涉及到线程同步访问。
去了解一下字符集编码是什么意思。
一个汉字它是多个字节的,要把它保存在磁盘上这种“有序列的”存储形式中,我们需要告诉电脑,高字节在前面还是在后面 (比如 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");
我们始终需要明确的指定字符集,这样的软件才能在全球各地使用,不指定字符集的可能只能处理同一个地方使用的文件,比如,在中国大陆只保存到磁盘上的文件拿到香港机器去读取可能就出错了,我们至少要把字符集单独放置在某个地方当成一个软件配置参数。
去了解一下字符集编码是什么意思。
一个汉字它是多个字节的,要把它保存在磁盘上这种“有序列的”存储形式中,我们需要告诉电脑,高字节在前面还是在后面 (比如 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");
我们始终需要明确的指定字符集,这样的软件才能在全球各地使用,不指定字符集的可能只能处理同一个地方使用的文件,比如,在中国大陆只保存到磁盘上的文件拿到香港机器去读取可能就出错了,我们至少要把字符集单独放置在某个地方当成一个软件配置参数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询