В настоящее время я работаю над простым приложением, которое передает скриншоты через сокеты. Я получаю скриншот, инстанцировании и с помощью класса робота следующим образом:Отправлять несколько очень маленьких пакетов или меньше крупных пакетов?
private Robot robot;
public Robot getRobot(){
if(robot == null){
try{
robot = new Robot();
}catch(Exception e){}
}
return robot;
}
public BufferedImage screenshot(){
return getRobot().createScreenCapture(getScreenRectangle());
}
public byte[] getBytes(BufferedImage image){
byte[] data = null;
try{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(img, "PNG", baos);
data = baos.toByteArray();
baos.close();
}catch(IOException e){}
return data;
}
я затем использовать метод getBytes
выше, чтобы преобразовать BufferedImage
в байтовый массив, который затем записывается в выходной разъем потока. Изображение составляет в среднем 500 КБ. Было бы более эффективно разделить этот 500KB на более мелкие сегменты, например, 5KB, или было бы лучше сохранить его в больших кусках, скажем, 30KB. Моя главная цель здесь - скорость и точность доставки. Я также был бы признателен за любые аргументы в пользу того, почему любой из этих способов будет более эффективным в этих терминах, чем другой.
Если вы используете TCP, точность не будет проблемой. Я думаю, что выбор размера пакета, близкого к размеру буфера TCP-стека, был бы идеальным. –
Почему бы вам просто не проверить его с разными размерами? – Manu
@SeanBright и каков размер буфера TCP-стека? Это зависит от системы? – rodit