Java I/O与流:全面解析
1. 文本、UTF与Unicode
在计算机早期,内存昂贵,每个字符用单字节表示,ASCII标准规定了256种位组合对应的字符。但它只能涵盖美国和英语字符,许多其他语言的字符被忽略。于是,很多群体开发了自己的字节到字符的映射标准,这导致处理文件时必须知道其使用的标准。
例如,位模式01000001在美国和欧洲代表A,在亚美尼亚代表类似草书Q的字母,在西藏代表类似断头台的字母。显然,8位不足以表示全球所有字符,因此Unicode标准应运而生,它将字符映射到16位值,可表示65,536个字符,几乎能完全编码所有语言(中文、日文和韩文除外)。
然而,Unicode虽代表未来,但当前世界上有数十亿文件使用Unicode前的8位映射,且网络通信也以8位字符为主。因此,Java采用了双重策略:
- 程序可使用UTF读写Unicode。
- 程序可使用读取器和写入器在内部Unicode和外部8位编码之间进行转换。
UTF即UCS转换格式,UCS代表通用字符集,它是压缩Unicode文本字符串的标准。Java的读取器和写入器类可让应用程序利用文件和网络中的8位文本。
2. 文件输入与输出
Java的java.io.File和java.io.RandomAccessFile类可用于导航本地文件系统、描述文件和目录以及非顺序访问文件。所有文件访问都始于创建这些类的实例。
2.1File类
java.io.File