对于从我的Android客户端向我的电脑服务器发送文件(例如.jpg),我感到非常困惑。问题是我之前使用ObjectStreams来往往发送其他数据和消息(封装在类对象中)。但是现在当我想发送整个文件时,我首先尝试将文件的字节编码为类对象内的字节数组变量,并使用ObjectOutputStream.writeObject()发送该对象。但是在PC端,当我将ObjectInputStream()读回到bytearray并将字节存储到文件中时,原始图像文件被破坏并且无用。
经过一些阅读后,我发现我必须使用缓冲来获取另一方的确切文件,而不是腐败。但我如何同时使用ObjectStreams和amp; OutputStream同时在单个套接字连接上。
以下是一些代码:
private ObjectOutputStream connectionOutput;
connectionOutput = new ObjectOutputStream(connectionSocket.getOutputStream());
public void sendPacket(AbstractPacket packet) throws IOException {//'packet' contains all the data
connectionOutput.writeObject(packet);
connectionOutput.flush();
connectionOutput.reset();
}
如果我添加了另一种方法,如:
private BufferedOutputStream BufferedconnectionOutput;
private OutputStream outputStream;
outputStream = socket.getOutputStream();
public void sendPacket(File file) throws IOException {
byte[] mybytearray = new byte[(int) file.length()];
fileInputStream = new FileInputStream(file);
bufferedInputStream = new BufferedInputStream(fileInputStream);
bufferedInputStream.read(mybytearray, 0, mybytearray.length);
outputStream.write(mybytearray, 0, mybytearray.length);
}
如果我在发送端使用这两个,我怎么能区分ObjectStreams&接收端的OutputStream。