java - 从 BufferedInputStream 读取 byte[]

标签 java bufferedinputstream

想知道下面从 TCP 套接字 BufferedInputStream 读取数据的代码。是否有任何原因使用 int s = _in.read() 读取第一个字节,然后使用 _in.read(byteData); 读取其余字节。我可以只读取 byte[] 而不使用第一个读取行吗?

private static String readInputStream(BufferedInputStream _in) throws IOException 
{
    String data = "";
    int s = _in.read();
    if(s==-1)
        return null;
    data += ""+(char)s;
    int len = _in.available();
    System.out.println("Len got : "+len);
    if(len > 0) {
        byte[] byteData = new byte[len];
        _in.read(byteData);
        data += new String(byteData);
    }
    return data;
}

最佳答案

您不应依赖调用 available() 来找出 Stream 的长度,因为它仅返回估计值。如果您想读取所有字节,请在如下循环中执行:

String data = "";
byte[] buffer = new byte[1024];
int read;
while((read = _in.read(buffer)) != -1) {
   data += new String(buffer, 0, read);    
} 

关于java - 从 BufferedInputStream 读取 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55871164/

相关文章:

java - 如何将多个参数移动到 jackson 中的另一个节点?

java - java中如何在一个文件中写入多次?

java - BufferedInputStream 如何让读操作更快?

java - java读取大文件时做 Action

java - 如何使用 Spinner 下拉菜单更改 TextView 小部件上的文本

java - 我可以删除 xml 文件吗?安卓

java - Android检查远程服务器是否在线

java - 当我的应用程序打开时,单击三星设备上的内置菜单按钮会发出两次声音

java-io - 如何用java制作一个下载器

java - 如何让 BufferedReader 一次接受多个输入?