Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关闭传递给MultipartFormDataOutput的流_Java_Stream_Resteasy - Fatal编程技术网

Java 关闭传递给MultipartFormDataOutput的流

Java 关闭传递给MultipartFormDataOutput的流,java,stream,resteasy,Java,Stream,Resteasy,Resteasy没有解释谁负责关闭传递给MultipartFormDataOutput的流。让我们考虑下面的例子: WebTarget target = ClientBuilder.newClient().target("url"); MultipartFormDataOutput formData = new MultipartFormDataOutput(); FileInputStream fis1 = new FileInputStream(new File(&quo

Resteasy没有解释谁负责关闭传递给
MultipartFormDataOutput
的流。让我们考虑下面的例子:

WebTarget target = ClientBuilder.newClient().target("url");
MultipartFormDataOutput formData = new MultipartFormDataOutput();
FileInputStream fis1 = new FileInputStream(new File("/path/to/image1"));
FileInputStream fis2 = new FileInputStream(new File("/path/to/image2"));
formData.addFormData("image", fis1, MediaType.APPLICATION_OCTET_STREAM_TYPE);
formData.addFormData("image", fis2, MediaType.APPLICATION_OCTET_STREAM_TYPE);
Entity<MultipartFormDataOutput> entity = Entity.entity(formData, MediaType.MULTIPART_FORM_DATA);
Response response = target.request().post(entity);
WebTarget=ClientBuilder.newClient().target(“url”);
MultipartFormDataOutput formData=新的MultipartFormDataOutput();
FileInputStream fis1=新的FileInputStream(新文件(“/path/to/image1”);
FileInputStream fis2=新的FileInputStream(新文件(“/path/to/image2”);
formData.addFormData(“图像”,fis1,媒体类型。应用程序\u八位字节\u流\u类型);
formData.addFormData(“图像”,fis2,媒体类型。应用程序\u八位字节\u流\u类型);
实体=实体.实体(formData,MediaType.MULTIPART\u FORM\u DATA);
响应=target.request().post(实体);
resteasy会关闭
fis1
fis2
,还是用户应该注意关闭这些流?

我建议使用,以确保它们会关闭

WebTarget target = ClientBuilder.newClient().target("url");
MultipartFormDataOutput formData = new MultipartFormDataOutput();

try(FileInputStream fis1 = new FileInputStream(new File("/path/to/image1")));
    FileInputStream fis2 = new FileInputStream(new File("/path/to/image2")))
{
  formData.addFormData("image", fis1, MediaType.APPLICATION_OCTET_STREAM_TYPE);
  formData.addFormData("image", fis2, MediaType.APPLICATION_OCTET_STREAM_TYPE);
  Entity<MultipartFormDataOutput> entity = Entity.entity(formData, 
  MediaType.MULTIPART_FORM_DATA);
  Response response = target.request().post(entity);
}
WebTarget=ClientBuilder.newClient().target(“url”);
MultipartFormDataOutput formData=新的MultipartFormDataOutput();
try(FileInputStream fis1=newfileinputstream(新文件(“/path/to/image1”));
FileInputStream fis2=新的FileInputStream(新文件(“/path/to/image2”))
{
formData.addFormData(“图像”,fis1,媒体类型。应用程序\u八位字节\u流\u类型);
formData.addFormData(“图像”,fis2,媒体类型。应用程序\u八位字节\u流\u类型);
实体=实体。实体(formData,
MediaType.MULTIPART\u FORM\u DATA);
响应=target.request().post(实体);
}

所以我可以自己回答我的问题,希望有人能从中受益

Resteasy将关闭经过的流。在我的例子中,
InputStreamProvider
将负责关闭
FileInputStream

     public void writeTo(InputStream inputStream, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException
   {
           LogMessages.LOGGER.debugf("Provider : %s,  Method : writeTo", getClass().getName());
       try
       {
           int c = inputStream.read();
           if (c == -1)
           {
               httpHeaders.putSingle(HttpHeaderNames.CONTENT_LENGTH, Integer.toString(0));
               entityStream.write(new byte[0]); // fix RESTEASY-204
               return;
           }
           else
               entityStream.write(c);
         ProviderHelper.writeTo(inputStream, entityStream);
       }
       finally
       {
         inputStream.close();
       }
   }
public void writeTo(InputStream InputStream、类类型、类型genericType、注释[]注释、MediaType MediaType、多值Map httpHeaders、OutputStream entityStream)引发IOException
{
LogMessages.LOGGER.debugf(“提供程序:%s,方法:writeTo”,getClass().getName());
尝试
{
int c=inputStream.read();
如果(c==-1)
{
httpHeaders.putSingle(HttpHeaderNames.CONTENT_LENGTH,Integer.toString(0));
entityStream.write(新字节[0]);//修复RESTEASY-204
返回;
}
其他的
entityStream.write(c);
writeTo(inputStream、entityStream);
}
最后
{
inputStream.close();
}
}

谢谢你的回答,但不是真的回答我的问题。