Java 为什么.readUTF()over socket会因文件大小较小而失败?
我正在通过套接字将文件从客户端传输到基本服务器。当我传输小文件(1kb)时,它在Java 为什么.readUTF()over socket会因文件大小较小而失败?,java,sockets,Java,Sockets,我正在通过套接字将文件从客户端传输到基本服务器。当我传输小文件(1kb)时,它在String fileName=clientData.readUTF()上失败但是对于大文件(31mb),它工作得非常好 在我看来,它似乎没有足够的时间。有人能澄清一下吗? 短暂性脑缺血发作 服务器 public void receiveFile() { System.out.println("in receive file"); try { int bytesRead;
String fileName=clientData.readUTF()上失败代码>但是对于大文件(31mb),它工作得非常好
在我看来,它似乎没有足够的时间。有人能澄清一下吗?
短暂性脑缺血发作
服务器
public void receiveFile()
{
System.out.println("in receive file");
try {
int bytesRead;
DataInputStream clientData = new DataInputStream(clientSocket.getInputStream());
String fileName = clientData.readUTF();
OutputStream output = new FileOutputStream(("received_from_client_" + fileName));
long size = clientData.readLong();
byte[] buffer = new byte[1024];
while (size > 0 && (bytesRead = clientData.read(buffer, 0, (int) Math.min(buffer.length, size))) != -1) {
output.write(buffer, 0, bytesRead);
size -= bytesRead;
}
output.close();
clientData.close();
System.out.println("File " + fileName + " received from Client " + clientID);
} catch (IOException ex) {
System.err.println("ERROR Connection closed Client " + clientID);
}
}
痕迹
对等方已关闭连接。没有更多的数据。关闭您的终端并忘记它。代码在哪一行失败(打印ex
的堆栈跟踪)。@McDowell补充到问题中。tia.好的,关于抛出IOException
:流已经关闭,并且包含的输入流在关闭后不支持读取,或者发生另一个I/O错误,所有这些都必须说明。我会查看服务器代码,看看当它调用writeUTF
@McDowell No时会发生什么,这并不是所有文档都要说的。它还表示“EOFEException-如果此输入流在读取所有字节之前到达末尾”。@EJP-啊,是的,我误读了堆栈跟踪。
java.io.EOFException
at java.io.DataInputStream.readUnsignedShort(DataInputStream.java:340)
at java.io.DataInputStream.readUTF(DataInputStream.java:589)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at example3.CLIENTConnection.receiveFile(CLIENTConnection.java:75)
at example3.CLIENTConnection.run(CLIENTConnection.java:50)
at java.lang.Thread.run(Thread.java:722)