我有一个包含以下数据的二进制文件 test.data:
01 E6 B5 8B E8 AF 95 02
例如第一个字节就是一个序号01。接下来的6个字节是两个UTF8汉字“测试”。然后第8个字节又是另一个序号02。
据我所知,UTF8 是可变长度(1-4 个字节)。请参考这篇文章。
我正在使用以下代码来读取 Int32 和 Byte(UInt8):
extension NSInputStream
{
func readInt32() -> Int
{
var readBuffer = Array<UInt8>(count:sizeof(Int32), repeatedValue: 0)
var numberOfBytesRead = self.read(&readBuffer, maxLength: readBuffer.count)
return Int(readBuffer[0]) << 24 |
Int(readBuffer[1]) << 16 |
Int(readBuffer[2]) << 8 |
Int(readBuffer[3])
}
func readByte() -> Byte {
var readBuffer : Byte = 0
return self.read(&readBuffer, maxLength: sizeof(UInt8))
}
我想写一个从流中读取字符串的方法。这是我的想法:
- 读取字节(假设我知道要读取多少字节)
- 将字节转换为字符
- 将字符附加到字符串中
但问题是要为一个字符读取多少字节,因为 UTF8 长度是不同的?一般来说,我的问题是我应该如何阅读 UTF8 字符串?提前致谢。