我正在使用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) 当我们需要关闭输出流时,我们有两个选择.
closeQuietly意味着关闭一个流,没有异常抛出.
try {
close(out)
} catch(IOException e) {
}
Run Code Online (Sandbox Code Playgroud)关
try {
close(out)
} catch(IOException e) {
throw anException;
}
Run Code Online (Sandbox Code Playgroud)众所周知,输出流会在关闭时将一个/几个字符写入文件末尾,如果这些写入错误,文件也无法正确打开,如ZipoutputStream.
如果我使用第一个,我将有一些失败的风险.如果我使用第二个,它会让我的代码不友好.
有人可以给我一些建议吗?
很抱歉没有明确地描述这个问题.
我的意思是如何安全地进行IO操作.如果资源的发布失败,它将让调用者知道.
谢谢你的所有答案.特别感谢@Don Roby给我一个包含@Fabian Barney回答的最佳答案的链接
我需要在系统中向客户提供zip文件的视图,并允许客户下载选择的文件.
现在我已经记住了所有的zipentry位置,但有没有java zip工具来解压缩zip文件的指定位置?API就像解压缩(file,long entryStart,long entryLength);
我想问一个关于activemq主题的问题.
我输入了activemq的管理页面,发现排队的消息永远不会在主题中出列,即使消费者写得正确也是如此.这意味着所有已发布的消息将永久保存在ActiveMQ中.
这些消息是否会导致内存泄漏?是否有解决方案可以使消费的消息出列?

下面有我的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中支持?怎么解决这个问题?
我已经阅读了Wiki http://en.wikipedia.org/wiki/Truevision_TGA,我知道tga文件的第18个字节的5-4位表示tga文件的方向.
那么,有4个排列(00,01,10,11)向我们展示方向,每个排列代表哪个方向?
我有 2 百万需要插入 postgresql 的数据。但它发挥了低效。我可以通过将大事务拆分为较小的事务来实现高性能插入器吗(实际上,我不想这样做)?或者,还有其他明智的解决方案吗?
我正在尝试创建一个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 ×6
file-upload ×1
hibernate ×1
image ×1
jdbc ×1
jersey ×1
large-files ×1
outputstream ×1
postgresql ×1
sqlexception ×1
tga ×1
transactions ×1
zip ×1