我正在尝试学习Java,我遇到了这个练习题,我必须创建一个URL提取器。我能够流式传输数据并进行打印。但是我并不熟悉缓冲读卡器因此我需要帮助创建一个100字节的缓冲区,将100字节的数据从流复制到这个字节数组,然后处理这部分,然后从下一个100字节的块中取出流等等......
以下是我的代码,非常感谢任何帮助。
我知道我想要的东西需要在while循环中完成。我想我需要创建一个字节数组,然后将数据存储到其中。这是我对此更感兴趣的方式。
编辑:我不需要任何代码示例,因为我正在努力学习。只有我如何能做到这一点的描述就足够了。非常感谢提前。
答案 0 :(得分:0)
BufferedInputStream
而非InputStream
的{{1}}(因为读者可以将字节转换为字符串,但我们不需要)。 Reader
的{{1}}方法将下一系列字节复制到数组中。然后,您可以按照自己的方式处理检索到的字节。请参阅the API documentation作为read(byte[])
所做的参考。
答案 1 :(得分:0)
如评论中所述,Reader
(及其子类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();
}
一些有用的链接:
有关Java IO相关内容的介绍,请参阅Java教程页面http://docs.oracle.com/javase/tutorial/essential/io/。这应该是了解流,读者等的起点。
有关BufferedInputStream
和BufferedReader
的文档,请参阅其API参考:
http://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html
http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html