嘿,我正在尝试在 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)