【发布时间】:2017-05-05 19:02:48
【问题描述】:
我有一个套接字,它通过一个不会关闭的 InputStream 接收图像。我想以这种方式连续发送图像。但是现在收到的图像延迟了 1 张图像(我发送了第二张之后的第一张,发送了第三张之后的第二张,......)。我做错了什么?
服务器
public static void readImages(InputStream stream) throws IOException {
stream = new BufferedInputStream(stream);
BufferedImage image = null;
int j = 0;
while (true) {
stream.mark(MAX_IMAGE_SIZE);
ImageInputStream imgStream = ImageIO.createImageInputStream(stream);
Iterator<ImageReader> i = ImageIO.getImageReaders(imgStream);
if (!i.hasNext()) {
System.out.println("No more image readers");
break;
}
ImageReader reader = i.next();
reader.setInput(imgStream);
image = reader.read(0);
ImageIO.write(image,"jpg",new File("current" + j + ".jpg"));
System.out.println("Save an image " + j);
if (image == null) {
System.out.println("Image is null");
break;
}
long bytesRead = imgStream.getStreamPosition();
stream.reset();
stream.skip(bytesRead);
j++;
}
}
客户
new Thread(new Runnable() {
@Override
public void run() {
try {
OutputStream outputStream = server.getOutputStream();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmapToSend = Bitmap.createScaledBitmap(bitmapToSend, 900, 800, true);
bitmapToSend.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
outputStream.write(byteArray);
outputStream.flush();
} catch (IOException e) {
System.out.println("Socket not created");
e.printStackTrace();
}
}
}).start();
注意我没有关闭客户端的输出流,所以我可以一直发送图片。
【问题讨论】:
-
您使用什么代码发送第二张或第三张图片?
-
我用相机拍照(bufferedImage)并将其分配给bitmapToSend。剩下的就是“客户端”sn-p
-
是的,这已经在氰化物的答案中实现了,但是有一个问题。我把它放在下面的评论中。
标签: android sockets stream bufferedimage