我正在爲學校作業創建文件服務器應用程序。我目前擁有的是一個簡單的Client
類,它通過TCP發送一個圖像,一個Server
類接收它並將其寫入文件。Java DataInputStream長度
這是我的客戶端代碼
import java.io.*;
import java.net.*;
class Client {
public static void main(String args[]) throws Exception {
long start = System.currentTimeMillis();
Socket clientSocket = new Socket("127.0.0.1", 6789);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
File file = new File("hot.jpg");
FileInputStream fin = new FileInputStream(file);
byte sendData[] = new byte[(int)file.length()];
fin.read(sendData);
outToServer.write(sendData, 0, sendData.length);
clientSocket.close();
long end = System.currentTimeMillis();
System.out.println("Took " + (end - start) + "ms");
}
}
,這是我的服務器代碼。
import java.io.*;
import java.net.*;
class Server {
public static void main(String args[]) throws Exception {
ServerSocket serverSocket = new ServerSocket(6789);
Socket connectionSocket = serverSocket.accept();
DataInputStream dis = new DataInputStream(connectionSocket.getInputStream());
byte[] receivedData = new byte[61500]; // <- THIS NUMBER
for(int i = 0; i < receivedData.length; i++)
receivedData[i] = dis.readByte();
connectionSocket.close();
serverSocket.close();
FileOutputStream fos = new FileOutputStream("received.jpg");
fos.write(receivedData);
fos.close();
}
}
我的問題是如何獲取正在發送的文件的大小。如果您檢查Server
的代碼,您會看到我現在已經對數字進行了硬編碼,即61500。我如何動態檢索這個號碼?
或者,我這樣做是錯誤的方式?什麼是替代解決方案?
感謝兄弟,做了這項工作。 – 2011-05-10 08:38:52
發送之前,我沒有看到將文件讀入內存的位置?它在哪裏,我該如何避免它? – 2011-05-10 08:47:16
@David Weng:在使用'< - THIS NUMBER'時,您將爲整個文件分配足夠的內存。你很少需要這樣做,並且它不會擴展到適度大的文件。 – EJP 2011-05-10 09:09:40