java eclipse中的java.io.EOFException 试试看{ 套接字=新套接字(“localhost”,9999); while(true){ ObjectInputStream ois=新的ObjectInputStream(socket.getInputStream()); 字节[]buf=新字节[1024]; FileOutputStream fout=新的FileOutputStream(“c:/hyebin/hyebin/exercise.jpg”); while((ois.read(buf,0,buf.length))!=-1){ 四次写入(基本单位,0,基本单位长度); } System.out.println(“파일 수신 및 저장 성공"); } }捕获(例外情况除外){ 例如printStackTrace(); } java.io.EOFException 位于java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890) 位于java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385) 位于java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942) 位于java.base/java.io.ObjectInputStream。(ObjectInputStream.java:385) 位于comm/comm.client.main(client.java:14)
这是我的客户端代码。第一个代码正常运行。但是,这样的错误从第二次保存时就发生了。我不知道错误发生在哪里。这段代码有各种各样的问题java eclipse中的java.io.EOFException 试试看{ 套接字=新套接字(“localhost”,9999); while(true){ ObjectInputStream ois=新的ObjectInputStream(socket.getInputStream()); 字节[]buf=新字节[1024]; FileOutputStream fout=新的FileOutputStream(“c:/hyebin/hyebin/exercise.jpg”); while((ois.read(buf,0,buf.length))!=-1){ 四次写入(基本单位,0,基本单位长度); } System.out.println(“파일 수신 및 저장 성공"); } }捕获(例外情况除外){ 例如printStackTrace(); } java.io.EOFException 位于java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890) 位于java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385) 位于java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942) 位于java.base/java.io.ObjectInputStream。(ObjectInputStream.java:385) 位于comm/comm.client.main(client.java:14),java,sockets,tcp,Java,Sockets,Tcp,这是我的客户端代码。第一个代码正常运行。但是,这样的错误从第二次保存时就发生了。我不知道错误发生在哪里。这段代码有各种各样的问题 while(true)很奇怪,会导致您看到的异常 虽然使用了ObjectInputStream,但绝对没有任何原因。纯jane inputstreams具有read()函数。不要在ObjectInputStream中包装套接字 ois.read不读取完整的缓冲区。它读取至少1个字节,可能更多,可能是整个缓冲区,但它不必这样做。您忽略它读取的字节数,然后将完整的缓冲区写
ois.read
不读取完整的缓冲区。它读取至少1个字节,可能更多,可能是整个缓冲区,但它不必这样做。您忽略它读取的字节数,然后将完整的缓冲区写入文件,这意味着,例如,如果网络数据包大小小于文件大小,您的代码将中断。您需要d要保存read
调用返回的值,如果它是-1,则停止,如果不是,则写入那么多字节(提供该值而不是buf.length
作为写入方法的第三个参数)client.java:14
位?这是有用的信息try {
socket = new Socket("localhost", 9999);
while(true) {
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
byte[] buf = new byte[1024];
FileOutputStream fout = new FileOutputStream("c:/hyebin/hyebin/excercise.jpg");
while((ois.read(buf, 0, buf.length))!=-1){
fout.write(buf, 0, buf.length);
}
System.out.println("파일 수신 및 저장 성공");
}
} catch (Exception ex) {
ex.printStackTrace();
}
java.io.EOFException
at java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890)
at java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385)
at java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942)
at java.base/java.io.ObjectInputStream.<init>(ObjectInputStream.java:385)
at comm/comm.client.main(client.java:14)
很简单,不是吗?一般来说,查看您正在使用的javadoc资料,了解如何使用它,并找到任何有用的快捷方式,例如
transferTo
方法,这是一个好主意。这段代码有各种各样的问题
ois.read
不读取完整的缓冲区。它读取至少1个字节,可能更多,可能是整个缓冲区,但它不必这样做。您忽略它读取的字节数,然后将完整的缓冲区写入文件,这意味着,例如,如果网络数据包大小小于文件大小,您的代码将中断。您需要d要保存read
调用返回的值,如果它是-1,则停止,如果不是,则写入那么多字节(提供该值而不是buf.length
作为写入方法的第三个参数)client.java:14
位?这是有用的信息try {
socket = new Socket("localhost", 9999);
while(true) {
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
byte[] buf = new byte[1024];
FileOutputStream fout = new FileOutputStream("c:/hyebin/hyebin/excercise.jpg");
while((ois.read(buf, 0, buf.length))!=-1){
fout.write(buf, 0, buf.length);
}
System.out.println("파일 수신 및 저장 성공");
}
} catch (Exception ex) {
ex.printStackTrace();
}
java.io.EOFException
at java.base/java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2890)
at java.base/java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3385)
at java.base/java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:942)
at java.base/java.io.ObjectInputStream.<init>(ObjectInputStream.java:385)
at comm/comm.client.main(client.java:14)
很简单,不是吗?一般来说,查看您正在使用的javadoc资料,找出如何使用它,并找到任何有用的快捷方式,例如
transferTo
方法。为什么while(true){…}
?您试图读取JPEG文件时,ObjectInputStream
使用的流类型错误。为什么while(true){…}
?您试图读取JPEG文件时,ObjectInputStream
使用的流类型错误。您的代码无效。图像未保存。此处正常。代码无效。图像未保存。此处正常。图像未保存。此处正常。