java - Swift 3.0 中的 FileHandle 和 java 中的 FileInputStream 的区别

标签 java android ios swift

在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/

相关文章:

Java在数据库中的持久化

android - 删除 Android Studio 配置文件夹

Android Studio,必须为 FileProvider 声明元素路径

android - 如何使用 Retrofit 添加 TLS v 1.0 和 TLS v.1.1

ios - Swift- EXC_CRASH (SIGABRT) 如何使用此堆栈跟踪查找异常

android - 根据我的需要选择正确的数据库

ios - image.backgroundColor 变化和重复动画

java - 为什么编辑器关闭时不调用 IPerspectiveListener.perspectiveChanged() ?

java - 如何使用Java代码动态将同一文件夹下的多个json文件上载而不知道json文件中的属性到MongoDB

java - 警报在 chrome 中不起作用,但在 firefox 中起作用