【问题标题】:ByteString what does the parameters exactly do?ByteString 参数究竟做了什么?
【发布时间】:2021-04-26 09:06:58
【问题描述】:

我想使用 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 个参数.. 第一个:字节数组 第二:偏移 第三:字节数

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

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

【问题讨论】:

  • 您的问题与上传或websockets无关。
  • @blackapps 它是功能的一部分,但你是对的,我调整了标题。谢谢。

标签: android kotlin websocket okhttp


【解决方案1】:

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

计算机科学世界

量子计算

现在第一行的偏移量是 0 第二行的偏移量将是

-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,世界

所以基本上,方法可以用作子字符串。但既然你想发送所有字节,你可以简单地使用

fun of(vararg data: Byte): ByteString

【讨论】:

  • 莎拉感谢您的回复和解释。非常感谢。
猜你喜欢
  • 2020-05-29
  • 2012-07-23
  • 2016-09-10
  • 2023-03-15
  • 2012-10-17
  • 2021-06-04
  • 1970-01-01
  • 2018-07-30
  • 2019-10-06
相关资源
最近更新 更多