Java 通过datainputStream以字节[]数组的形式接收多个图像
好的,那么对于我的服务器程序,我正在尝试发送15个图像,代码:Java 通过datainputStream以字节[]数组的形式接收多个图像,java,arrays,image,byte,datainputstream,Java,Arrays,Image,Byte,Datainputstream,好的,那么对于我的服务器程序,我正在尝试发送15个图像,代码: try{ //t1.start(); for(int i =1; i<16; i++){ baos = new ByteArrayOutputStream(); BufferedImage img = ImageIO.read(new File("myimage"+i+".jpg")
try{
//t1.start();
for(int i =1; i<16; i++){
baos = new ByteArrayOutputStream();
BufferedImage img = ImageIO.read(new File("myimage"+i+".jpg"));
ImageIO.write(img, "jpg", baos);
baos.flush();
imageInByte=baos.toByteArray();
outToClient.write(imageInByte,0,imageInByte.length);
outToClient.flush();
//System.out.println(Arrays.toString(imageInByte));
//ImageIO.write(img, "jpg", outToClient);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
好的,所以我知道while(true)循环不起作用,我尝试了很多替代方法,比如if语句来检查datainputstream的字节数等,但是我没有乐趣。有人知道如何从服务器连续接收字节[]数组吗?任何帮助都将不胜感激。您正在使用Java吗?哦,是的,很抱歉没有说明。是的,我正在使用java。在客户端代码中,您也可以看到“File outputfile=new File(“saved1.jpg”);”,如果我想让它正常工作,我希望每个新图像都保存到下一个数字,即saved2.jpg,saved3.jpg等您不需要在图像之间使用某种类型的清除器序列,以便客户端知道一个图像何时结束,另一个图像何时开始吗?如果您正在制定自己的协议,则应为每个映像创建一个标头,标头至少指示以下映像的大小(以字节为单位),以便您知道何时到达映像的末尾并可以启动下一个映像。通过使用ObjectOutputStream而不是dataoutputstream解决了此问题。
try
{
Socket sock = new Socket("127.0.0.1", 8001);
DataInputStream inFromServer = new DataInputStream(sock.getInputStream());
System.out.println("networking established");
byte[] message = new byte[120947];
while(true){
inFromServer.read(message);
BufferedImage image = ImageIO.read(new ByteArrayInputStream(message));
File outputfile = new File("saved1.jpg");
ImageIO.write(image, "jpg", outputfile);
}
}catch(IOException ex){
ex.printStackTrace();
}