gpt4 book ai didi

java - 在java中客户端获取负字节数组长度或大量字节数组长度

转载 作者:行者123 更新时间:2023-12-01 13:29:58 24 4
gpt4 key购买 nike

我正在将图像从服务器传输到客户端。服务器捕获屏幕并将其转换为字节数组,客户端接收字节数组并将其转换回图像。但只传输了几帧,然后就发生了错误。

接收方:

while(true) {
DataInputStream dis = new DataInputStream(csocket.getInputStream());
int len = dis.readInt();
System.out.println(len);
byte data[] = null;
data = new byte[len];
dis.read(data);
ByteArrayInputStream in = new ByteArrayInputStream(data);
BufferedImage image1=ImageIO.read(in);
ImageIcon imageIcon= new ImageIcon(image1);
Image image = imageIcon.getImage();
image = image.getScaledInstance(cPanel.getWidth(),cPanel.getHeight(),Image.SCALE_FAST);
//Draw the recieved screenshot
Graphics graphics = cPanel.getGraphics();
graphics.drawImage(image, 0, 0, cPanel.getWidth(),cPanel.getHeight(),cPanel);
}

发送方:

while(continueLoop) {
try {
BufferedImage image = robot.createScreenCapture(rectangle);
byte[] imageInByte;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image,"jpg", baos);
baos.flush();
imageInByte = baos.toByteArray();
baos.close();
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//PrintWriter out = new PrintWriter(socket.getOutputStream());

//out.flush();
dos.writeInt(imageInByte.length);
System.out.println(imageInByte.length);
dos.write(imageInByte);
Thread.sleep(1000);
dos.flush();
}
catch(Exception e) {
}
}

接收器的输出:

 1177222283
-297418067
1228900861
-412483840
189486847
10536391
-33405441
12898815
740182
-16736067
-805436987
-16726825
258150991
2137853087
1917408603
512024791
-1227886373
-1034512766
1772271848
157387
Exception in thread "Thread-3" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:228)
at remoteclient.ClientScreenReciever.run(ClientScreenReciever.java:65)

请帮助我......如何在java中以更快的方式通过套接字将图像从服务器连续传输到客户端。

最佳答案

您正在使用

DataInputStream#read(byte[])

其中(检查其 Javadoc)不保证将读取完整数组的数据。此方法用于缓冲读取,而不是完全读取请求的字节数。

相反,您必须调用

DataInputStream#readFully(byte[])

其中有适合您目的的契约(Contract)(再次检查 Javadoc)。

关于java - 在java中客户端获取负字节数组长度或大量字节数组长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21626763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com