小编Mr *_*ain的帖子

使用Jersey客户端上传大文件时如何避免OutOfMemoryError

我正在使用Jersey客户端进行基于http的请求.如果文件很小但是当我发布大小为700M的文件时遇到错误,它会很好用:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:2786)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:94)
    at sun.net.www.http.PosterOutputStream.write(PosterOutputStream.java:61)
    at com.sun.jersey.api.client.CommittingOutputStream.write(CommittingOutputStream.java:90)
    at com.sun.jersey.core.util.ReaderWriter.writeTo(ReaderWriter.java:115)
    at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeTo(AbstractMessageReaderWriterProvider.java:76)
    at com.sun.jersey.core.impl.provider.entity.FileProvider.writeTo(FileProvider.java:103)
    at com.sun.jersey.core.impl.provider.entity.FileProvider.writeTo(FileProvider.java:64)
    at com.sun.jersey.multipart.impl.MultiPartWriter.writeTo(MultiPartWriter.java:224)
    at com.sun.jersey.multipart.impl.MultiPartWriter.writeTo(MultiPartWriter.java:71)
    at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:300)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler._invoke(URLConnectionClientHandler.java:204)
    at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:147)
    at com.sun.jersey.api.client.Client.handle(Client.java:648)
    at com.sun.jersey.api.client.WebResource.handle(WebResource.java:680)
    at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:568)
    at TestHttpRequest.main(TestHttpRequest.java:42)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

ClientConfig cc = new DefaultClientConfig();
        Client client = Client.create(cc);
        WebResource resource = client.resource("http://localhost:8080/JerseyWithServletTest/helloworld");
        FormDataMultiPart form = new FormDataMultiPart();
        File file = new File("E:/CN_WXPPSP3_v312.ISO");
        form.field("username", "ljy");
        form.field("password", "password");
        form.field("filename", file.getName());
        form.bodyPart(new FileDataBodyPart("file", file, MediaType.MULTIPART_FORM_DATA_TYPE));
        ClientResponse …
Run Code Online (Sandbox Code Playgroud)

file-upload jersey large-files

17
推荐指数
3
解决办法
4万
查看次数

我应该使用close或closeQuietly来关闭输出流吗?

当我们需要关闭输出流时,我们有两个选择.

  1. closeQuietly意味着关闭一个流,没有异常抛出.

    try {
        close(out)
    } catch(IOException e) {
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. try {
        close(out)
    } catch(IOException e) {
        throw anException;
    }
    
    Run Code Online (Sandbox Code Playgroud)

众所周知,输出流会在关闭时将一个/几个字符写入文件末尾,如果这些写入错误,文件也无法正确打开,如ZipoutputStream.

如果我使用第一个,我将有一些失败的风险.如果我使用第二个,它会让我的代码不友好.

有人可以给我一些建议吗?

很抱歉没有明确地描述这个问题.

我的意思是如何安全地进行IO操作.如果资源的发布失败,它将让调用者知道.

谢谢你的所有答案.特别感谢@Don Roby给我一个包含@Fabian Barney回答的最佳答案的链接

java outputstream

8
推荐指数
1
解决办法
7599
查看次数

如何在java中的zip文件中提取特定文件

我需要在系统中向客户提供zip文件的视图,并允许客户下载选择的文件.

  1. 解析zip文件并在网页上显示.并记住后端的每个zipentry位置(例如file1从字节100宽度长度1024字节开始).
  2. 客户单击下载按钮时下载指定的文件.

现在我已经记住了所有的zipentry位置,但有没有java zip工具来解压缩zip文件的指定位置?API就像解压缩(file,long entryStart,long entryLength);

java zip

7
推荐指数
3
解决办法
1万
查看次数

为什么主题消息不会出列?

我想问一个关于activemq主题的问题.

我输入了activemq的管理页面,发现排队的消息永远不会在主题中出列,即使消费者写得正确也是如此.这意味着所有已发布的消息将永久保存在ActiveMQ中.

这些消息是否会导致内存泄漏?是否有解决方案可以使消费的消息出列?

在此输入图像描述

java activemq-classic

5
推荐指数
1
解决办法
2984
查看次数

Hibernate抛出期待的OPEN,发现'+'

下面有我的hql:

update User set count = count + ?2 where id = ?1
Run Code Online (Sandbox Code Playgroud)

以下是例外情况:

org.hibernate.hql.internal.ast.QuerySyntaxException: expecting OPEN, found '+' near line 1, column 71 [update com.yitaosoft.edm.common.persist.entity.User set count = count + ? where id = ?]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
    at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:79)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:278)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:182)
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:138)
Run Code Online (Sandbox Code Playgroud)

我想更新用户设置count = count + xx,其中id = xx.但得到了语法错误.为什么?是不是在hql中支持?怎么解决这个问题?

java hibernate

5
推荐指数
2
解决办法
1万
查看次数

如何在java中获取tga文件的方向

我已经阅读了Wiki http://en.wikipedia.org/wiki/Truevision_TGA,我知道tga文件的第18个字节的5-4位表示tga文件的方向.

那么,有4个排列(00,01,10,11)向我们展示方向,每个排列代表哪个方向?

java image tga

5
推荐指数
1
解决办法
239
查看次数

如何在大事务下获得高性能(postgresql)

我有 2 百万需要插入 postgresql 的数据。但它发挥了低效。我可以通过将大事务拆分为较小的事务来实现高性能插入器吗(实际上,我不想这样做)?或者,还有其他明智的解决方案吗?

postgresql transactions

3
推荐指数
2
解决办法
7922
查看次数

如何检测SQ​​LException的SQL错误状态

我正在尝试创建一个JDBC连接池组件,但我遇到了一个问题.那就是:如何检测错误状态java.sql.SQLException.据说国家应遵循文件中的SQL2003惯例和XOPEN SQL惯例JDK.但我找不到关于这两个约定的任何文件.有人可以为我提供吗?

我想知道每个州代表什么,所以我可以决定何时完全关闭连接或重新连接.

我已经提到了源代码BoneCP.以下是发生SQLException时将激活的部分:

    ImmutableSet<String> sqlStateDBFailureCodes = ImmutableSet.of("08001", "08007", "08S01", "57P01", "HY000"); 
    String state = e.getSQLState();
        ConnectionState connectionState = this.getConnectionHook() != null ? this.getConnectionHook().onMarkPossiblyBroken(this, state, e) : ConnectionState.NOP; 
        if (state == null){ // safety;
            state = "08999"; 
        }

        if (((sqlStateDBFailureCodes.contains(state) || connectionState.equals(ConnectionState.TERMINATE_ALL_CONNECTIONS)) && this.pool != null) && this.pool.getDbIsDown().compareAndSet(false, true) ){
            logger.error("Database access problem. Killing off all remaining connections in the connection pool. SQL State = " + state); …
Run Code Online (Sandbox Code Playgroud)

java jdbc sqlexception

0
推荐指数
1
解决办法
5200
查看次数