Java 将固定字节从输入流存储到字节数组中

Java 将固定字节从输入流存储到字节数组中,java,bytearray,bufferedreader,bytebuffer,Java,Bytearray,Bufferedreader,Bytebuffer,我试图学习Java,遇到了一个实践问题,我必须创建一个URL提取器。我能够流式传输数据并打印它。然而,我对缓冲读取器并不十分熟悉,因此我需要帮助创建一个100字节的缓冲区,将100字节的数据从流复制到这个字节数组,然后处理这个部分,然后从流中获取下一个100字节块,依此类推 以下是我的代码,任何帮助都将不胜感激 我知道我想要的东西需要在while循环中完成。我想我需要创建一个字节数组,然后将数据存储到其中。这是我更感兴趣的原因 编辑:我不需要任何代码示例,因为我正在尝试学习。只有对我如何做到这一

我试图学习Java,遇到了一个实践问题,我必须创建一个URL提取器。我能够流式传输数据并打印它。然而,我对缓冲读取器并不十分熟悉,因此我需要帮助创建一个100字节的缓冲区,将100字节的数据从流复制到这个字节数组,然后处理这个部分,然后从流中获取下一个100字节块,依此类推

以下是我的代码,任何帮助都将不胜感激

我知道我想要的东西需要在while循环中完成。我想我需要创建一个字节数组,然后将数据存储到其中。这是我更感兴趣的原因

编辑:我不需要任何代码示例,因为我正在尝试学习。只有对我如何做到这一点的描述就足够了。先谢谢你

在while循环外创建一个大小为所需的字节数组,这样可以重复使用,因此速度更快。 您可以使用围绕原始InputStream的BufferedInputStream,而不是读取器,因为读取器可以将字节转换为字符串,但我们不需要这样做。 然后可以使用BufferedInputStream的readbyte[]方法将下一系列字节复制到数组中。然后,您可以按照您想要的方式处理检索到的字节。
请参阅readbyte[]的功能参考。

如注释中所述,读卡器及其子类BufferedReader用于读取字符而不是字节。您应该改为使用BufferedInputStream读入指定大小的字节数组:

public static void main(String[] args) throws IOException {
    String website = "thecakestory.com";
    Socket client = new Socket(InetAddress.getByName(website), 80);

    PrintWriter pw = new PrintWriter(client.getOutputStream());

    pw.println("GET /index.php / HTTP/1.1\r\n");
    pw.println("Host: " + website);
    pw.flush();

    BufferedInputStream input = new BufferedInputStream(client.getInputStream());

    String x;
    int bytesRead;
    byte[] contents = new byte[100];
    while ((bytesRead = input.read(contents)) != -1) {
        x = new String(contents, 0, bytesRead);
        System.out.print(x);
    }

    client.close();
    pw.close();

}
一些有用的链接:

有关JavaIO相关内容的介绍,请参见Java教程页面。这应该是学习流、读者等的起点

有关BufferedInputStream和BufferedReader的文档,请参阅其API参考:


如果您想处理字节,那么为什么要使用读卡器?读卡器用于字符,InputStream用于bytes@immibis我不知道该如何处理这个问题。但我基本上想做的是从流中读取字符,将它们存储到字节数组中,直到达到100字节的数据。然后对这个数组执行我想执行的任何操作,并再次使用下一组字符填充数组,直到字节数组中填充了100字节的数据。你明白吗?我如何根据上面给出的代码设置BufferedInputStream?你能再解释一下吗?很抱歉,我是Java的新手,因此无法理解这是如何工作的?更新。您可以通过指定套接字的输入流client.getInputStream来创建它,这有点类似于您使用BufferedReader时的方式。这很有效!谢谢。你能不能给我一些链接,让我看看这两种方法到底是如何工作的?我仍然不清楚BufferedReader或BufferedInputStream实际上是做什么的。当然。我刚刚添加了它们。你能再解释一下第二步吗?如何在代码中实现BufferedInputStream而不是BufferedReader?