当前位置: 首页 > 面试题库 >

java.net.URL将流读取到byte []

皮自明
2023-03-14
问题内容

我正在尝试从URL(带有java包 **java.net.URL** )读取图像 到byte
[]。“所有内容”都可以正常工作,只不过不是从流中精心地读取内容(图像已损坏,它不包含所有图像数据)…字节数组一直保存在数据库(BLOB)中。我真的不知道正确的方法是什么,也许你可以给我一个小贴士:)

这是我的第一种方法(代码格式化,删除了不必要的信息…):

URL u = new URL("http://localhost:8080/images/anImage.jpg");
int contentLength = u.openConnection().getContentLength();
Inputstream openStream = u.openStream();
byte[] binaryData = new byte[contentLength];
openStream.read(binaryData);
openStream.close();

我的第二种方法是这种方法(您将看到contentlength正在另一种方式获取):

URL u = new URL(content);
openStream = u.openStream();
int contentLength = openStream.available();
byte[] binaryData = new byte[contentLength];
openStream.read(binaryData);
openStream.close();

问题答案:

不能保证您提供的内容长度实际上是正确的。尝试类似以下的方法:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
InputStream is = null;
try {
  is = url.openStream ();
  byte[] byteChunk = new byte[4096]; // Or whatever size you want to read in at a time.
  int n;

  while ( (n = is.read(byteChunk)) > 0 ) {
    baos.write(byteChunk, 0, n);
  }
}
catch (IOException e) {
  System.err.printf ("Failed while reading bytes from %s: %s", url.toExternalForm(), e.getMessage());
  e.printStackTrace ();
  // Perform any other excepthtml" target="_blank">ion handling that's appropriate.
}
finally {
  if (is != null) { is.close(); }
}

然后,您将获得图像数据baos,可以通过调用从中获取字节数组baos.toByteArray()

这段代码未经测试(我只是在答案框中写了它),但是它与我认为的要求相当接近。



 类似资料:
  • 问题内容: 假设我有一个java.net.URL对象,它指向 要么 在某处有一些帮助程序可以在其中添加一些相对URL吗?例如append 或get: 问题答案: 有一个带有基础和规范的构造函数。 或者,更严格地遵守标准,并具有执行相同操作的方法。创建一个从你的使用。

  • 问题内容: 嗨, 我有一个对象,该对象具有与之关联的URL信息。目前,我将此URL保存在一个简单的String属性中,但是java.net.URL将为我提供其他好处,例如检测格式错误的URL等。 另一方面,如果JPA只是为URL对象创建一个LOB,我会觉得很丑。有谁知道兼容的JPA提供者将如何将类型java.net.URL的属性持久化到数据库中? 问题答案: 根据JPA规范: 实体的持久字段或属性

  • 问题内容: 你如何两次读取同一输入流?是否可以某种方式复制它? 我需要从网络获取图像,将其保存在本地,然后返回保存的图像。我只是想,使用相同的流而不是为下载的内容启动新的流然后再次读取它会更快。 问题答案: 你可以用来将的内容复制到字节数组,然后使用从字节数组重复读取。例如:

  • 我目前正试图从服务器读取图像文件,但得到的数据不完整或 这与缓冲区大小有关吗?我已经尝试使用静态大小而不是ContentLength。敬请指教。

  • 问题内容: 我有JSON值列表(实际上是一个文本文件,其中每一行都是一个JSON对象)。像这样: 某些值可能会丢失(例如,第一项没有“工作”值,第二项没有“教育”和“年龄”)。 我需要在R中创建数据框,并将所有缺少的列值填充为NA(如果至少一行中存在唯一名称的字段)。如何轻松实现呢? 我已经完成的工作-我安装了“ rjson”包,并将这些行解析为R列表。假设lines变量是line的字符向量。 “