所以,我有一个简单的Android应用程序,使用套接字连接到Java Server应用程序。 具体来说,我希望能够将文件从Server应用程序发送到Android应用程序,然后将该文件存储在设备的内部存储器中。 传输文件的服务器代码的基础是:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(System.getProperty("user.home"), "text.txt")));
BufferedOutputStream bos = new BufferedOutputStream(clientSocket.getOutputStream());
byte buffer[] = new byte[1024];
int read;
while ((read = bis.read(buffer)) != -1) {
bos.write(buffer, 0, read);
}
bos.flush();
bos.close();
和接收文件的客户端代码如下:
BufferedInputStream bis = new BufferedInputStream(clientSocket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(openFileOutput("text.txt", Context.MODE_PRIVATE));
byte buffer[] = new byte[1024];
int read;
while ((read = bis.read(buffer)) != -1) {
bos.write(buffer, 0, read);
}
bos.flush();
bos.close();
当客户端代码在标准Java应用程序中时,代码似乎工作正常,也就是说,文件从服务器成功发送到客户端。 当我在Android应用程序中使用此代码时出现问题。 (注意:我在标准Java应用程序中使用标准FileOutputStream而不是
openFileOutput("text.txt", Context.MODE_PRIVATE))
排在上面。)
例如,我传输的文件是一个简单的UTF-8文本文件,其中包含一个字符串
This is a text file.
但是,当我拉这个文件时,我已经复制到模拟器,从模拟器上的“/ data / data // files”文件夹中,文件顶部还有一些额外的字节,所以内容是现在
¨ÌThis is a text file.
我不知道为什么会这样,而且让我难过。我认为问题可能与该行有关:
BufferedOutputStream bos = new BufferedOutputStream(openFileOutput("text.txt", Context.MODE_PRIVATE));
但我无法弄明白。
关于我做错的任何建议都会有所帮助。
提前谢谢