我目前正在编写一个客户端服务器程序,允许我将文件从客户端上传到服务器。但是,当我尝试此操作时,文件会损坏,并且看起来并非所有字节都被传输。有人能告诉我为什么会这样吗?感谢。
以下是客户端代码的一部分:
System.out.println("What file would you like to upload?");
String file=in.next();//get file name
outToServer.writeUTF(file);//send file name to server
File test= new File(file);//create file
byte[] bits = new byte[(int) test.length()]; //byte array to store file
FileInputStream fis= new FileInputStream(test); //read in file
//write bytes into array
int size=(int) test.length();//size of array
outToServer.write(size);//send size of array to Server
fis.read(bits);//read in byte values
fis.close();//close stream
outToServer.write(bits, 0, size);//writes bytes out to server
这是服务器代码:
String filename= inFromClient.readUTF();//read in file name that is being uploaded
int size=inFromClient.read(); //read in size of file
byte[] bots=new byte[size]; //create array
inFromClient.read(bots); //read in bytes
FileOutputStream fos=new FileOutputStream(filename);
fos.write(bots);
fos.flush();
fos.close();
String complete="Upload Complete.";
outToClient.writeUTF(complete);
答案 0 :(得分:0)
尝试并使用Java 7的Files.copy()
。
在客户端:
final Path source = Paths.get(file);
Files.copy(source, outToServer);
在服务器端:
final Path destination = Paths.get(file);
Files.copy(inFromClient, destination);
答案 1 :(得分:0)
通常的错误。您假设read()填充缓冲区。没有义务这样做。见Javadoc。
在Java中复制流的规范方法如下:
while ((count = in.read(buffer)) > 0)
{
out.write(buffer, 0, count);
}
两端使用此功能。你不需要一个像文件大小的缓冲区。这适用于具有一个或多个元素的任何字节数组。