ByteString 参数究竟是做什么的?

时间:2021-01-21 21:29:24

标签: android kotlin websocket okhttp

我想使用 okhttp websocket 将一些最大 30 MB 的文件上传到我的服务器。 websocket 传输只允许 String 或 ByteString。 所以我想将我的文件转换为 ByteString,然后通过 websocket(Nodejs) 将其上传到我的服务器。

我使用 ByteString.of() 像这样转换这个 byteArray。

        val file = "../tmp/file.jpg"

        try {
            val encoded:ByteArray = Files.readAllBytes(Paths.get(file))

            val byteString = ByteString.of(encoded,0,1024)

            ..send data

            Log.d("log1","DATA DONE")
        } catch (e: IOException) {
            Log.d("log1","ERROR:"+e)
        }

但是让我困惑的是 ByteString 函数需要 3 个参数.. 第一:字节数组 第二:偏移 第三:Bytecount

我的问题是最后两个参数的作用是什么?背后的原因是什么?我没有找到任何关于此的明确文档。只是它添加的路线图。

如果您有任何链接或建议,请告诉我。

1 个答案:

答案 0 :(得分:2)

-Offset 实际上是您要开始读取字节的位置。 假设一个包含以下数据的文本文件

计算机科学世界

量子计算

现在第一行的偏移量是 0 <0,Computer Science World> 第二行的偏移量是 <23,Quantum Computing>

-ByteCount 是你要计算的字节数(包括)

让我们用一段简单的代码帮你

byte[] bytes1 = "Hello, World!".getBytes(Charsets.UTF_8);
ByteString byteString = ByteString.of(bytes1, 2, 9);
// Verify that the bytes were copied out.
Sytem.out.print(byteString.utf8());

答案是:llo,Worl

所以基本上,方法可以用作子字符串。但是由于您想发送所有字节,您可以简单地使用

fun of(vararg data: Byte): ByteString