Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 3.0中的FileHandle与java中的FileInputStream之间的差异_Java_Android_Ios_Swift - Fatal编程技术网

Swift 3.0中的FileHandle与java中的FileInputStream之间的差异

Swift 3.0中的FileHandle与java中的FileInputStream之间的差异,java,android,ios,swift,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]); } 在swift 3.0中 var buffer = Data() let file = try FileHandle(forReadin

在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]);
}
在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数据类型,这就是我有不同输出的原因。我的问题是,在swift中,如何获得相同的java输出。非常感谢你


编辑:输出代码

在您的java代码中,您可以尝试直接执行此操作,以便在打印时取消签名

for(int i = 0; i<buffer.length ; i++){
     Log.e("buff","buff "+ (buffer[i] & 0xFF));
}

for(int i=0;i
数据
是无符号字节(
UInt8
)的集合。如果 要将它们打印为有符号字节,则可以使用
Int8(位模式:)
它创建了一个具有相同 内存表示:

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是无符号的,aka-50=206等等…-128-128 vs 0-256FYI-由于您处理的是字节数据,我建议您更新java代码以像swift代码一样打印。感谢Fonix的回答!我如何将206转换为-56h我错了,我想把206改成-50,180改成-76,214改成-42,就像上面的问题一样。这就是我需要的,非常感谢。我真的很想对这个答案竖起大拇指,但我现在没有足够的声誉。对不起!!
let signedByteArray = buffer.map { Int8(bitPattern: $0) } // [Int8]
print(signedByteArray)
// [69, 82, 0, 0, 0, 5, 0, 0, 0, -50, -76, -42]