Questions tagged «inputstream»

用Java读取数据流的抽象机制

6
从OKHTTP下载二进制文件
我在我的Android应用程序中使用OKHTTP客户端进行联网。 此示例显示了如何上传二进制文件。我想知道如何使用OKHTTP客户端获取二进制文件下载的输入流。 这是示例的清单: public class InputStreamRequestBody extends RequestBody { private InputStream inputStream; private MediaType mediaType; public static RequestBody create(final MediaType mediaType, final InputStream inputStream) { return new InputStreamRequestBody(inputStream, mediaType); } private InputStreamRequestBody(InputStream inputStream, MediaType mediaType) { this.inputStream = inputStream; this.mediaType = mediaType; } @Override public MediaType contentType() { return mediaType; …

10
确定InputStream的大小
我目前的情况是:我必须读取文件并将内容放入InputStream。之后,我需要将的内容InputStream放入一个字节数组,该数组需要(据我所知)的大小InputStream。有任何想法吗? 根据要求,我将显示从上传文件创建的输入流 InputStream uploadedStream = null; FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); java.util.List items = upload.parseRequest(request); java.util.Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { uploadedStream = item.getInputStream(); //CHANGE uploadedStreambyte = item.get() } } 该请求是一个HttpServletRequest对象,类似于FileItemFactory和ServletFileUpload,来自Apache Commons FileUpload包。

10
将输入流连接到输出流
在Java9中更新: https 我看到了一些类似但不是很需要的线程。 我有一台服务器,它基本上将从客户端A的客户端接收输入,并将其逐字节转发到另一个客户端B。 我想将客户端A的输入流与客户端B的输出流连接。这可能吗?有什么方法可以做到这一点? 而且,这些客户端正在互相发送消息,这在某种程度上是时间敏感的,因此不会进行缓冲。我不希望有500个缓冲区,而客户端发送499个字节,然后我的服务器推迟转发500个字节,因为它没有收到填充缓冲区的最后一个字节。 现在,我正在解析每个消息以找到其长度,然后读取长度字节,然后转发它们。我认为(并测试)这比读取字节并一次又一次地转发字节要好,因为那样会很慢。由于我在上一段中提到的原因,我也不想使用缓冲区或计时器-我不想仅仅因为缓冲区未满而等待很长时间的消息才能通过。 有什么好方法吗?

3
为什么使用BufferedInputStream逐字节读取文件比使用FileInputStream更快?
我试图使用FileInputStream将文件读入数组,而一个〜800KB的文件花了大约3秒钟才能读入内存。然后,我尝试了相同的代码,只是将FileInputStream包装到BufferedInputStream中,这花费了大约76毫秒。为什么即使我仍在逐字节读取文件,为什么使用BufferedInputStream逐字节读取文件的速度如此之快?这是代码(其余代码完全无关)。请注意,这是“快速”代码。如果需要“慢速”代码,则只需删除BufferedInputStream: InputStream is = null; try { is = new BufferedInputStream(new FileInputStream(file)); int[] fileArr = new int[(int) file.length()]; for (int i = 0, temp = 0; (temp = is.read()) != -1; i++) { fileArr[i] = temp; } BufferedInputStream快30倍以上。远不止于此。那么,这是为什么呢?有可能使此代码更有效(不使用任何外部库)吗?

8
关闭Java InputStreams
我对使用Java InputStreams时close()方法的用法有一些疑问。从大多数开发人员的经验来看,当不再需要InputStream时,应该始终在InputStream上显式调用close()。但是,今天我正在研究使用Java属性文件,并且发现的每个示例都具有以下内容: Properties props = new Properties(); try { props.load(new FileInputStream("message.properties")); //omitted. } catch (Exception ex) {} 在上面的示例中,没有任何方法可以显式调用close(),因为使用InputStream后将无法访问它。我看过InputStreams的许多类似用法,即使它似乎与大多数人所说的显式关闭相矛盾。我通读了Oracle的JavaDocs,它没有提到Properties.load()方法是否关闭InputStream。我想知道这通常是否可以接受,或者是否更喜欢执行以下操作: Properties props = new Properties(); InputStream fis = new FileInputStream("message.properties"); try { props.load(fis); //omitted. } catch (Exception ex) { //omitted. } finally { try { fis.close(); } catch (IOException ioex) { //omitted. …
69 java  inputstream 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.