Я делаю простое приложение для отправки изображений на Java, и у меня есть некоторые проблемы, которые я не знаю, как их решить. Основная проблема заключается в том, что когда я отправляю большое изображение (около 1000 * 600), изображение не принимается полностью, я имею в виду часть изображения, которая не похожа на исходную картинку. Я думаю, что это проблема переполнения, но я прошу другую точку зрения. Спасибо!
originalImage: https://imgur.com/hK8zwX1
Полученное изображение: https://imgur.com/8O2I0rc
sendImage
public void sendFile(File inputFile) throws IOException {
try {
Socket socket = new Socket("localhost", 1414);
OutputStream outputStream = socket.getOutputStream();
System.out.println("Conexion establecida");
File f = inputFile;
BufferedImage image = ImageIO.read(f);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(image, "jpg", byteArrayOutputStream);
byte[] size = ByteBuffer.allocate(1024).putInt(byteArrayOutputStream.size()).array();
outputStream.write(size);
outputStream.write(byteArrayOutputStream.toByteArray());
outputStream.flush();
System.out.println("Flushed: " + System.currentTimeMillis());
Thread.sleep(1);
System.out.println("Closing: " + System.currentTimeMillis());
socket.close();
} catch (InterruptedException ex) {
Logger.getLogger(ButPanel.class.getName()).log(Level.SEVERE, null, ex);
}
}
Клиент:
try {
ServerSocket serverSocket = new ServerSocket(1414);
while (true) {
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
System.out.println(socket.getInetAddress() + " conectandose..." + System.currentTimeMillis());
byte[] sizeAr = new byte[1024];
inputStream.read(sizeAr);
int size = ByteBuffer.wrap(sizeAr).asIntBuffer().get();
byte[] imageAr = new byte[size];
inputStream.read(imageAr);
BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageAr));
System.out.println("Received " + image.getHeight() + "x" + image.getWidth() + ": " + System.currentTimeMillis());
ImageIO.write(image, "jpg", new File("C:\\Users\\Public\\Pictures\\imgTemp.jpg"));
File f = new File ("C:\\Users\\Public\\Pictures\\imgTemp.jpg");
System.out.println("Closing: " + System.currentTimeMillis());
this.repaint();
serverSocket.close();
}
} catch (IOException ex) {
System.err.println(ex.getMessage());
}