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

标签 java network-programming fileoutputstream datainputstream

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

(客户端使用DataInputStream write(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(转换为字节)是一个有效的字节值。您不想在 -1 处停止,而应该捕获 EOFException。

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

关于java - 使用DataInputStream接收文件信息并写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7656086/

相关文章:

java - eclipse 中的换行符和空行格式

java - 将 Android 启动 Activity 更改为另一个 Activity = 应用程序无法加载

java - 从嵌入式 jar 中获取应用程序属性 - Spring Boot

java - Java RPC 服务器框架

java - FileOutputStream.getChannel() 可以返回 null 吗?

java - Playframework:如何禁用特定操作的 session /cookie?

routing - Windows 上的数据包重定向

linux - 我想用树莓派创建一个无线局域网,它将运行nodejsexpress框架来在浏览器中播放视频

java - 为什么我的 FileOutputStream 将文件保存在错误的位置?

Java 将 byte[] 写入文件 - 空文件