在java中我也使用这段代码将mp3文件读入缓冲区
byte[] buffer = new byte[12];
stream.read(buffer, offset, 12 - offset);
for(int i = 0; i<buffer.length ; i++){
Log.e("buff","buff "+ buffer[i]);
}
这是缓冲区的结果
69 82 0 0 0 5 0 0 0 -50 -76 -42
在 swift 3.0 中
var buffer = Data()
let file = try FileHandle(forReadingFrom: urlLocal)
file.seek(toFileOffset: 0)
buffer = file.readData(ofLength: 12)
for i in 0...(buffer.count-1){
print(buffer[i])
}
这里是缓冲区的结果
69 82 0 0 0 5 0 0 0 206 180 214
我认为 Swift 中的数据使用 Unit8 数据类型,这就是我输出不同的原因。我的问题是,我怎样才能快速获得相同的 java.lang 输出?太感谢了 !
编辑:输出代码
最佳答案
Data
是一组无符号字节 (UInt8
)。如果你真的
想将它们打印为带符号的字节然后你可以使用
Int8(bitPattern:)
创建一个带符号的值
内存表示:
let buffer = Data(bytes: [69, 82, 0, 0, 0, 5, 0, 0, 0, 206, 180, 214])
for byte in buffer {
print(Int8(bitPattern: byte))
}
// 69 82 0 0 0 5 0 0 0 -50 -76 -42
或者从数据创建一个[Int8]
数组并打印该数组:
let signedByteArray = buffer.map { Int8(bitPattern: $0) } // [Int8]
print(signedByteArray)
// [69, 82, 0, 0, 0, 5, 0, 0, 0, -50, -76, -42]
关于java - Swift 3.0 中的 FileHandle 和 java 中的 FileInputStream 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40099755/