обновление в java9: https://docs.oracle.com/javase/9/docs/api/java/io/InputStream.html#transferTo-java.io.OutputStream-Подключение входного потока к OutputStream
Я видел несколько подобных, но не совсем то, что-я-потребность темы.
У меня есть сервер, который будет в основном принимать входные данные от клиента, клиент A, и пересылать его, байты за байт, другой клиент, клиент B.
Я хотел бы подключить InputStream от клиента A с моим выходным потоком клиента B. Возможно ли это? Каковы способы сделать это?
Кроме того, эти клиенты отправляют друг другу сообщения, которые в некоторой степени чувствительны к времени, поэтому буферизация не будет выполняться. Я не хочу, чтобы буфер говорил 500, а клиент отправляет 499 байт, а затем мой сервер держится при пересылке 500 байтов, потому что он не получил последний байт, чтобы заполнить буфер.
Прямо сейчас, я разбираю каждое сообщение, чтобы найти его длину, а затем считывать длины байтов, а затем пересылать их. Я решил (и испытал), что это будет лучше, чем чтение байта и пересылка байта снова и снова, потому что это будет очень медленно. Я также не хотел использовать буфер или таймер по той причине, о которой я говорил в своем последнем абзаце, - я не хочу, чтобы сообщения ожидали очень долгое время, чтобы пройти через просто потому, что буфер не заполнен.
Каков хороший способ сделать это?
Да, я думаю, что это очищает вещи. Я думаю, что меня путают с readFully(), который требует заполнения буфера. – jbu
Я пробовал свой код, и я также попытался прочитать сообщение по сообщениям, прочитав длину сообщения, а затем выполнив байт [] buf = length; inputstream.read (buf) .... последний способ был быстрее, и я не уверен, почему. Кажется, что он выполняет больше строк кода, но это быстрее. Почти в 2 раза быстрее. – jbu
Кроме того, поскольку мой сервер имеет несколько источников и один приемник, я думаю, что мне нужно читать * сообщения * в нескольких источниках, потому что просто буферы чтения и пересылки могут чередовать сообщения между клиентами и скремблировать их. – jbu