iOS:将ByteArray([Int8])写入swift 4中的文件

时间:2018-04-14 11:15:58

标签: java ios swift swift4 filehandle

我正在使用 swift 4 开发 iOS 的应用程序。

我需要将 ByteArray [Int8] 写入 applicationSupportDirectory 中的文件。 后来我需要在我的服务器上传文件来读取它并进行操作。 我的服务器在java平台上。

问题是,我必须在写入文件之前将ByteArray转换为数据(NSData)。但我的java服务器拒绝将其转换回 ByteArray []

知道如何实现这个目标吗?

  1. 如何将byteArray Int8 [] 写入 swift 4 中的文件,其格式与我们在java文件中编写的格式相同。
  2. 如何在我的java服务器上读取文件并检索 byteArray []
  3. 任何线索都会很棒。

    编辑: 添加代码:

    let newByteArray: [Int8] = [62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 61, 0, 114, 0, 61, 0, 114, 0]
    let data = Data(bytes: newByteArray, count: newByteArray.count)
    let file: FileHandle? = try FileHandle(forUpdating: url)
    
        if file == nil {
            print("Failed to open file handler")
        } else {
            file?.seekToEndOfFile()
            file?.write(data)
            file?.closeFile()
    
        }
    

    现在我不知道如何从文件中读取它并将其转换为原始输入。 另外如何使用java平台在我的服务器上读取文件。

    很抱歉,如果这是一个愚蠢的问题,我对swift和iOS来说太新了。

1 个答案:

答案 0 :(得分:0)

Swift中的Byte是一个UInt8对象。如果您有一个来自Java的Int8集合并希望将数据保存到磁盘,则需要先将其转换为字节[UInt8]的集合:

let bytes: [UInt8] = [0, 127, 128, 255]

let toInt8 = bytes.map(Int8.init)         // [0, 127, -128, -1]
let backToBytes = toInt8.map(UInt8.init)  // [0, 127, 128, 255]
let data = Data(backToBytes)

在你的情况下

let newByteArray: [Int8] = [62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 61, 0, 114, 0, 61, 0, 114, 0]

let data = Data(newByteArray.map(UInt8.init))
print(Array(data))  // [62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 62, 0, 113, 0, 61, 0, 114, 0, 61, 0, 114, 0]

将Int8数组转换为数据后,您可以使用数据的写入方法将其保存到App Sandbox中的任何目录