两台android设备发送文件。
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeInt(bytes.length);
发送的时候需要发送文件的大小。否则会报错。java.lang.NegativeArraySizeException
发送端:
byte [] imageByte;
FileInputStream inputStream ;
File file = new File(Environment.getExternalStorageDirectory() + "/" + "fff.jpg");
try {
inputStream = new FileInputStream(file);
imageByte=readStream(inputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Socket socket = null;
try {
socket = new Socket(ip, 8888);
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeInt(imageByte.length);//发送的时候必须添加文件的大小。
out.write(imageByte);
out.close();
socket.close();
} catch (IOException e){
e.printStackTrace();
}
/**
* @param
* @param inStream
* @return byte[]
* @throws Exception
*/
public static byte[] readStream(InputStream inStream) throws Exception {
byte[] buffer = new byte[1024];
int len = -1;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
while ((len = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
outStream.close();
inStream.close();
return data;
}
接受端:
try {
ServerSocket server = new ServerSocket(8888);
Socket socket = server.accept();
DataInputStream dos = new DataInputStream(socket.getInputStream());
//因为发送时忘记添加文件大小。所以size的为负数报错了
int size = dos.readInt();
byte[] data = new byte[size];
int len = 0;
while (len < size) {
len += dos.read(data, len, size - len);
}
bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);
dos.close();
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}