gpt4 book ai didi

java - 阅读直到带有套接字的标记的最佳实践(Java)?

转载 作者:行者123 更新时间:2023-11-30 05:58:56 26 4
gpt4 key购买 nike

我正在创建一个在手机上运行的移动应用程序,并尝试以最有效的方式从中读取数据。该应用程序将向我的服务器应用程序发送数据(以字节的形式,不一定是字符)。

我不知道数据的长度;末尾将标有 3 字节标记(即 0x11、0x22、0x33),然后发送一组新数据。每个“组”数据中可能会发送大量数据。那么,我想知道读取这些数据的最有效方法是什么。我应该使用InputStreamReader吗? BufferedReader?显然,我需要检查每个字符以查看它是否是标记的一部分,如果是,则将标记之前的所有数据发送到另一个方法进行处理。

据我所知,BufferedReader.readLine() 将是我想要的如果我的结束标记是 \n (显然, 不是这种情况)。我是否需要编写自己的方法来逐字节读取 BufferedReader 并查找标记? (我也不知道这是否是最有效的方法?)

最佳答案

假设您的数据是字节数据而不是字符数据,您应该将套接字输入流包装在 BufferedInputStream 中,并使用它一次读取一个字节的数据,将字节保存在某种字节缓冲区。 (一种选择是使用 ByteArrayOutputStream 来缓冲从 BufferedInputStream 读取的数据字节。)

BufferedReaderreadLine() 不是正确的方法:

  • 假设数据不是字符数据,如果您尝试根据某种字符集对其进行解码,则可能会损坏它。
  • readLine 方法仅理解由 '\n' 和/或 '\r' 字符分隔的行。没有办法让它理解其他“行”分隔符。

最后,请注意,出于性能原因,BufferedInputStream 非常重要。如果您不使用它,并且一次从套接字 InputStream 读取一个字节,则可能会因 Java 应用程序执行的系统调用数量而导致性能显着下降。

关于java - 阅读直到带有套接字的标记的最佳实践(Java)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com