使用DataInputStream接收文件信息并写入

时间:2011-10-05 02:26:25

标签: java network-programming fileoutputstream datainputstream

我正在尝试接收客户端使用DataInputStream发送的文件并将其写入文件。

(客户端使用DataInputStream写(byte [],len,off)方法发送文件)

以下是我尝试的方法,但它没有收到完整的数据。

InputStream in = s.getInputStream(); //s is Socket that is connected.
BufferedInputStream bis = new BufferedInputStream(in);
DataInputStream din = new DataInputStream(bis);

FileOutputStream fos = new FileOutputStream(directory+"/"+filename);

byte b = din.readByte();
while(b != -1){
fos.write(b);
b = din.readByte();
}

我知道上面的实现可能并不优雅。

但我对java很陌生,所以请不要跟我讨论糟糕的风格

(如果你知道,如果你推荐更好的话,我真的很感激)

结果文件只有4KB,而应该是401KB

我应该如何修复此代码,以便我可以使用我的代码?

非常感谢你。

1 个答案:

答案 0 :(得分:2)

您正在读取一个字节,-1(强制转换为一个字节)是一个有效的字节值。你不想在-1上停止,而应该捕获EOFException。

使用其中一个标准InputStream.read()方法(返回int而不是byte)时测试为-1。