эй все, что я пытаюсь сделать поток вывода данных в php
записать примитивные типы данных в Java-приложение
я создал класс, который записывает данные в массив
(напишите так же, как в Java, скопируйте из Java-кода)
и, наконец, я записываю обратно массив клиенту.
кажется, что он не работает хорошо
например метод writeInt
отправить клиенту Java некоторые неправильные значения
я в порядке?
спасибо
вот мой код
private $buf = array();
public function writeByte($b) {
$this->buf[] = pack('c' ,$b);
}
public function writeInt($v) {
$this->writeByte($this->shiftRight3($v , 24) & 0xFF);
$this->writeByte($this->shiftRight3($v , 16) & 0xFF);
$this->writeByte($this->shiftRight3($v , 8) & 0xFF);
$this->writeByte($this->shiftRight3($v , 0) & 0xFF);
}
private function shiftRight3($a ,$b){
if(is_numeric($a) && $a < 0){
return ($a >> $b) + (2<<~$b);
}else{
return ($a >> $b);
}
}
public function toByteArray(){
return $this->buf;
}
вот как я настраиваю основной php файл
header("Content-type: application/octet-stream" ,true);
header("Content-Transfer-Encoding: binary" ,true);
вот как я возвращаю данные
$arrResult = $dataOutputStream->toByteArray();
for ($i = 0 ; $i < count($arrResult) ; $i ++){
echo $arrResult[$i];
}
Я РЕДАКТИРУЮ ВОПРОС, С УЧЕТОМ ИЗМЕНЕНИЯ КОДА
в клиентской части Java кажется, что у меня есть 2 байта, чтобы начать чтение всегда
у меня есть 13, 10, что \ r \ n
почему я читаю их всегда?
(в моем тесте я посылаю один байт на стороне клиента Java,
URL u = new URL("http://localhost/jtpc/test/inputTest.php");
URLConnection c = u.openConnection();
InputStream in = c.getInputStream();
int read = 0;
for (int j = 0; read != -1 ; j++) {
read = in.read();
System.out.println("More to read : " + read);
}
)
the output will be ,
More to read : 13
More to read : 10
More to read : 1 (this is the byte i am sending)