我正在使用新的FaceBook SDK 3.0.在将图片从URL发布到"我/照片"时,我间歇性地获得了一个EOFException
.我偶尔会遇到这个错误(约20次中有1次).
我还必须在获得之后添加,EOFException
如果我再次重新发布,它会成功发布.
所以,暂时我编码自动重试一次,如果我得到EOFException
解决方案似乎令人满意.
但是我需要知道导致它的原因,这是Android SDK中的一个错误.我用Google搜索了很多但却无法得到任何东西.
我发布了日志(出于安全原因删除了我的访问令牌和图片网址)
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Request:
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Id: 9
06-05 15:09:42.585: D/FacebookSDK.Request(16611): URL:https://graph.facebook.com/me/photos?caption=abc&format=json&sdk=android&migration_bundle=fbsdk%3A20121026&access_token=ADBCEFG&url=http%3A%2F%2Ftest.test.test%2Ftest%2Ftest%2F201695%2Ftest%2F18629
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Method: POST
06-05 15:09:42.585: D/FacebookSDK.Request(16611): User-Agent: FBAndroidSDK.3.0.0
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Content-Type: multipart/form-data; boundary=3i2ndDfv2rTHiSisAbouNdArYfORhtTPEefj3q2f
06-05 15:09:42.585: D/FacebookSDK.Request(16611): Parameters:
06-05 15:09:42.585: D/FacebookSDK.Request(16611): caption: abc
06-05 15:09:42.585: D/FacebookSDK.Request(16611): format: json
06-05 15:09:42.585: D/FacebookSDK.Request(16611): sdk: android
06-05 15:09:42.585: D/FacebookSDK.Request(16611): migration_bundle: fbsdk:20121026
06-05 15:09:42.585: D/FacebookSDK.Request(16611): access_token: ABCDEF
06-05 15:09:42.585: D/FacebookSDK.Request(16611): url: http://test.test.test/test/test/201695/test/18629
06-05 15:09:42.585: D/FacebookSDK.Request(16611): …
Run Code Online (Sandbox Code Playgroud) 我有一个问题,当我尝试读取任何输入时,我的HttpsURLConnection将抛出一个EOFException.该代码适用于某些网络调用,但在其他网络调用上失败.如果我尝试从连接中读取任何内容,则会因上述错误而失败.
例:
urlConnect.getResponseCode() // will throw error
urlConnect.getResponseMessage() // will throw error
BufferedInputStream in = new BufferedInputStream(urlConnect.getInputStream()); //will throw error
Run Code Online (Sandbox Code Playgroud)
以下是每个的堆栈跟踪:
GETRESPONSE:
03-14 09:49:18.547: W/System.err(6270): java.io.EOFException
03-14 09:49:18.547: W/System.err(6270): at libcore.io.Streams.readAsciiLine(Streams.java:203)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:495)
03-14 09:49:18.547: W/System.err(6270): at libcore.net.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:134)
Run Code Online (Sandbox Code Playgroud)
的BufferedInputStream:
03-14 09:39:14.077: W/System.err(5935): java.io.EOFException
03-14 09:39:14.077: W/System.err(5935): at libcore.io.Streams.readAsciiLine(Streams.java:203)
03-14 09:39:14.077: W/System.err(5935): at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
03-14 09:39:14.077: W/System.err(5935): at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
03-14 09:39:14.077: W/System.err(5935): at …
Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我使用Retrofit库进行同步 PUT
请求.问题是:有时候图书馆会抛出EOFException
s.
以下是其中一种情况的堆栈跟踪
29099-29269/com.mycompany.myapp D/Retrofit? java.io.EOFException
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:192)
at com.squareup.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:189)
at com.squareup.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:101)
at com.squareup.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:676)
at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:426)
at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:371)
at com.squareup.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:466)
at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:73)
at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:38)
at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:321)
at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:240)
at $Proxy7.addEvents(Native Method)
at com.mycompany.myapp.api.MyService.addEvents(MyService.java:59)
Run Code Online (Sandbox Code Playgroud)
我尝试了以下展示的解决方案,但在我的案例中没有一个有用:
以下是我RestAdapter
在我的应用中创建的方式:
OkHttpClient okHttpClient = new OkHttpClient();
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint(Url)
.setRequestInterceptor(new RequestInterceptor()
{
@Override
public void intercept(RequestFacade request)
{
request.addHeader("Accept", "application/json");
request.addHeader("Content-Type", "application/json");
}
})
.setClient(new OkClient(okHttpClient))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setErrorHandler(new MyErrorHandler())
.build();
Run Code Online (Sandbox Code Playgroud)
有没有人知道这个问题的其他解决方案?
顺便说一句,我不能使用涉及的解决方案, …
我正在使用DataInputStream并且有一个关于EOFExceptions的问题.
根据java文档:
表示在输入期间意外到达文件末尾或流末尾的信号.
此异常主要由数据输入流用于信号流的结束.请注意,许多其他输入操作在流末尾返回特殊值而不是抛出异常.
这是否意味着当生成EOFException时,流不会再次打开?这是否意味着你永远不会期待它的更多数据?
如果输出流连接到输入流并且调用了outputstream.close(),输入流是否会收到EOFException或IOException?
IOException被描述为:
表示发生某种I/O异常的信号.此类是由失败或中断的I/O操作产生的一般异常类.
输出流上的close是否会在datainputstream端产生EOFException或IOException?
这是最简单的问题.
我使用HttpUrlConnection对象通过代理创建到我的服务器的HTTPS连接.
我的代理关闭连接但我的代码仍尝试重用相同的连接.所以我得到了EOFException.
我该如何处理这类案件?
以下代码生成一个EOFException
.这是为什么?
public static Info readInfoDataFromFile(Context context) {
Info InfoData = null;
FileInputStream fis = null;
ObjectInputStream ois = null;
Object object = null;
if (context.getFileStreamPath("InfoFile.dat").exists()) {
try {
fis = context.openFileInput("InfoFile.dat");
ois = new ObjectInputStream(fis);
Object temp;
try {
// here it throws EOF exception in while loop
while ((temp = ois.readObject()) != null) {
object = temp;
}
} catch (NullPointerException npe) {
npe.printStackTrace();
} catch (EOFException eof) {
eof.printStackTrace();
} catch (FileNotFoundException fnfe) {
fnfe.printStackTrace();
} …
Run Code Online (Sandbox Code Playgroud) 我使用PDFClown .jar库将jpeg图像转换为pdf文件.但是,我得到以下错误:
java.lang.RuntimeException:java.io.EOFException
在这里你可以找到代码:
org.pdfclown.documents.contents.entities.Image image =
org.pdfclown.documents.contents.entities.Image.get("c:" + java.io.File.separator + "bg.jpg");
org.pdfclown.documents.contents.xObjects.XObject imageXObject = image.toXObject(document);
composer.showXObject(imageXObject);
composer.flush();
document.getFile().save("c:\\test.pdf" , SerializationModeEnum.Standard);
Run Code Online (Sandbox Code Playgroud)
请告诉我有什么问题?
今天我在java序列化和反序列化中遇到了奇怪的行为("奇怪",因为我不明白)
我正在从linux共享目录序列化和反序列化一个对象.序列化一切都没有任何问题,但当我试图反序列化它抛出的同一个文件
java. io. EOFException
.此外,反序列化仅对此新创建的文件失败,并且正在为该目录中的所有其他旧文件工作.
所以我在互联网上搜索,发现一个线程说低磁盘空间也可能导致此错误.
所以我清理了一些临时文件,瞧它工作了.我不明白磁盘空间不足只会影响反序列化而不是序列化?
我正在使用apache commons SerializationUtils
类.下面是序列化和反序列化的代码
SerializationUtils. serialize(myObject, new FileOutputStream(new File(sharePath+FILEName) ;
MyObject object=SerializationUtils. deserialize( new FileInputStream(new File(sharePath+FILEName);
Run Code Online (Sandbox Code Playgroud)
如果有人可以解释这种行为,那将非常有帮助.我怀疑它在SerializationUtils中的一个错误可能会吞噬IOException.
谢谢
使用异常来指示已到达文件的末尾似乎很脏.我们阅读的每个文件都有一个结尾,所以它似乎并不特殊或意外.此外,我不喜欢对我的程序的非异常流程使用异常.
我正在谈论使用java.io.EOFException来表示数据输入流的结束:
想象一个包含以下消息的文件......
----------------- ------------------
- 2-byte LENGTH - - N-byte PAYLOAD - , where N = LENGTH;
----------------- ------------------
Run Code Online (Sandbox Code Playgroud)
...并使用DataInputStream读取此文件:
DataInputStream in = new DataInputStream(...);
...
try {
while (true) {
short length = in.readShort();
byte[] b = new byte[length];
in.readFully(b);
}
} catch (EOFException e) { }
...
Run Code Online (Sandbox Code Playgroud)
在此示例中,调用将抛出EOFException in.readShort()
.我应该弄清楚文件中的字节数,并准确读取该字节数(由total -= length
零开始确定),并退出while循环而没有异常?我正在寻找最佳实践.
我应该这样做吗?
long total = file.length();
while (total > 0) {
short length = in.readShort();
total -= length;
byte[] b = new …
Run Code Online (Sandbox Code Playgroud) 我在后端使用Spring MVC实现文件上传,前端只是一个普通的HTML
<form method="POST" enctype="multipart/form-data" action="/upload">
file to upload: <input type="file" name="file"><br>
<input type="submit" value="Upload" />
</form>
Run Code Online (Sandbox Code Playgroud)
一切正常,除非我在上传过程中关闭浏览器,否则我会看到服务器抛出错误(您必须尽早中断该过程才能看到它)
java.io.EOFException: Unexpected EOF read on the socket
at org.apache.coyote.http11.InternalNioInputBuffer.fill(InternalNioInputBuffer.java:152)
at org.apache.coyote.http11.InternalNioInputBuffer$SocketInputBuffer.doRead(InternalNioInputBuffer.java:177)
at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:110)
at org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:416)
at org.apache.coyote.Request.doRead(Request.java:460)
at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:338)
at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:395)
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的方法来处理异常,或者我可以安全地保持原样?
eofexception ×10
java ×7
android ×4
exception ×2
file-io ×1
file-upload ×1
input ×1
inputstream ×1
io ×1
pdfclown ×1
rest ×1
retrofit ×1
spring-mvc ×1
stream ×1