我目前正试图从服务器读取图像文件,但得到的数据不完整或
Exception in thread "main"
java.lang.NegativeArraySizeException.
这与缓冲区大小有关吗?我已经尝试使用静态大小而不是ContentLength。敬请指教。
URL myURL = new URL(url);
HttpURLConnection connection = (HttpURLConnection)myURL.openConnection();
connection.setRequestMethod("GET");
status = connection.getResponseCode();
if (status == 200)
{
int size = connection.getContentLength() + 1024;
byte[] bytes = new byte[size];
InputStream input = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(file);
input = connection.getInputStream();
int data = input.read(bytes);
while(data != -1){
out.write(bytes);
data = input.read(bytes);
}
out.close();
input.close();
让我们检查一下代码:
int size = connection.getContentLength() + 1024;
byte[] bytes = new byte[size];
为什么要在大小上加上1024字节?有什么意义?缓冲区大小应该足够大,以避免太多的读取,但也应该足够小,以避免消耗太多的内存。例如,将其设置为4096。
InputStream input = new ByteArrayInputStream(bytes);
FileOutputStream out = new FileOutputStream(file);
input = connection.getInputStream();
为什么创建ByteArrayInputStream,然后完全忘记它?您不需要ByteArrayInputStream,因为您不是从字节数组读取,而是从连接的输入流读取。
int data = input.read(bytes);
while (data != -1) {
out.write(bytes);
data = input.read(bytes);
}
out.write(bytes, 0, data);
out.close();
input.close();
问题内容: 我正在使用从运行约一分钟的进程中读取stdout。 我该如何stdout以流方式打印出该流程的每一行,以便可以看到生成的输出,但仍然阻止该流程终止,然后再继续? 似乎一次给出所有输出。 问题答案: 这是一个简单的示例(不检查错误): 如果ls结束太快,则while循环可能会在你读取所有数据之前结束。 你可以通过以下方式在中捕获其余部分:
我从教程中创建了示例Kafka Streams应用程序: 不幸的是,这个应用程序不读取输入流。我有一个来自PostgreSQL的JDBC源连接器,它正在处理来自一个数据库的精细流数据(我可以在本主题中的Kafka Connect UI数据上看到)。 我的问题是,即使我在BOOTSTRAP\u SERVERS\u CONFIG的Properties IP is localhost中更改了IP,我也不
我有以下代码: 我只想模拟这些行,并在,因为我将有多个测试用例,具体取决于行(文件为空,行为空,我只得到一行,我得到几行,等等)。 注意:我使用库访问FTP服务器上的文件,因此方法将作为返回类型,而具有。 我正在使用junit 4.12和mockito 3.1.0 提前感谢!
我尝试使用getch()和kbsit()读取用户的输入,但它似乎无法识别按键被按下。 此代码打印“开始”,按下键时不打印任何内容。使用getch()读取和打印哪怕一个字符,而不使用循环,我都不走运。
问题内容: 我想制作一个Servlet过滤器,该过滤器将在处理和完成响应后读取响应的内容,并以XML或PDF或其他方式返回该信息。但是我不确定如何从HttpServletResponse对象中获取任何信息。我如何获得此信息? 问题答案: 将此添加到过滤器java文件。 使用以下代码: 现在,content变量具有输出流。您也可以对二进制内容执行此操作。
谢谢,罗伯