2009-04-13 14 views

답변

4

이론적으로는 가능합니다. 결국 바이트 일 뿐이므로 파싱 할 수 있습니다. 물론, deserialize 된 객체는 PHP 메소드가 아닌 데이터 만 포함합니다. 원한다면 PHP 클래스에 직접 해당하는 Java 클래스로 동작을 다시 작성해야합니다.

실제로 주된 문제는 PHP 직렬화 형식이 공식적으로 지정되어 있지 않은 것으로 보입니다. 최소한 the manual에 사양에 대한 링크가 없습니다.

형식을 이해하려면 코드를 파헤쳐 야 할 수도 있습니다.

모두 XML 직렬화와 같은 것을 사용하는 것이 훨씬 쉽고 안정적 ​​인 것처럼 들립니다. 두 언어 모두에이 라이브러리를 사용하는 것이 확실합니다.

0

Java implementation of PHP입니다. 따라서 은 객체를 직렬화하여 Java-PHP 인스턴스에 전달하고 역 직렬화 한 다음 Java 인프라로 호출 할 수 있습니다.

모든 것은 신랄한 혼란이 들리 겠지만, 아마도 살펴볼 가치가 있습니다!

2

어떻게 든 PHP의 var_export() 함수를 사용할 수 있습니다.이 함수는 직렬화하려는 객체의 구문 분석 가능한 문자열 표현을 반환합니다.

14

PHP와 Java 모두 자체적으로 (분명히 다른) 직렬화 체계를 사용합니다. 그러나 교환 형식을 사용하여 읽고 쓸 수 있습니다.

두 가지 가장 확실한 예는 XML과 JSON입니다.

그러나 Google 프로토콜 버퍼와 같은 다른 것들이 있습니다.

0

xstream (Java 객체를 읽을 수있는 XML로 변환)을 시도하여 직렬화 한 다음 비 직렬화 할 PHP 코드를 작성하십시오.

0

웹 서비스 (REST, RPC, SOAP) 또는 Java에서 데이터를 읽거나 다시 작성할 수있는 일반 텍스트를 저장하는 다른 솔루션을 사용하십시오.

1

이 기능이 필요한 Drupal (PHP CMS) 스 니펫을 기억합니다. 방금 찾았으므로 Serialized drupal node objects to java (PHP 직렬 객체로 작업해야 함)을 살펴보십시오.

아마도 사용하실 수 있습니다. 최신 버전의 PHP에 문제가 있는지 여부를 알 수 없습니다.

3

JSON 형식으로 시작하는 것이 좋습니다. Java, PHP 및 기타 많은 언어에 대한 구현이 있습니다.

처음에는 javascript 객체 리터럴 표기법을 기반으로했지만 JSON은 모든 유형의 시스템 간의 간단한 데이터 전송에 편리함이 입증되었습니다.

+0

물론, 기본 유형을 전송하는 데는 잘 작동하며 대부분의 언어에서 잘 지원됩니다. – Matt

+0

json.org에서는 구현이있는 languanges를 나열하므로 Javascript 전용이 아닙니다. – zimbu668

0

PHP에서 객체를 직렬화하면 객체 속성이 덤프됩니다. 결과 문자열은 그리 복잡하지 않습니다.

a:4:{i:0;i:1;i:1;N;i:2;s:8:"mystring";i:3;a:1:{s:3:"key";s:5:"value";}} 
문자열은 데이터 유형, 배열의 길이 배열 인덱스와 값, 문자열 길이를 식별

이 ... 그것을 리버스 엔지니어링 및 올 너무 많은 노력을하지 않을까요 :에

echo serialize(
    array(1, null, "mystring", array("key"=>"value")) 
); 

결과 당신 파서와 함께, 나는 생각한다.

0

PHP/Java 브리지 (http://php-java-bridge.sourceforge.net/) 사용에 관심이있을 수 있습니다. 자체 프로토콜이 있습니다. 그들의 사이트에서 그것은 다리의 빠른 구현이라고 말했다.

16

serialized-php-parser이 있습니다. 이는 PHP 직렬화 된 객체를 구문 분석 할 수있는 Java 구현입니다. 일반적으로, 당신이 선택의 여지가 있다면, ASCII 형식이 아니기 때문에 (널 바이트를 포함하고 있기 때문에) php-serialized를 교환 형식으로 사용하지 않는 것이 좋습니다. 대신 xml 또는 json과 같은 형식으로 이동하십시오. 약간의 유형 정보가 필요하면 xmlrpc을 선택하는 것이 좋습니다. 그것은 PHP와 자바 모두를위한 훌륭한 구현을 가지고있다.

7

PHP 직렬화 형식으로 작업하는 또 다른 Java 프로젝트는 Pherialize입니다.

array(3) { 
    [0]=> 
    string(8) "A string" 
    [1]=> 
    int(12345) 
    [2]=> 
    bool(true) 
} 

그런 다음이 같은 Pherialize 자바에서 문자열을 비 일렬 화 할 수 있습니다 : 이전의 답변처럼

MixedArray list = Pherialize.unserialize(data).toArray(); 
System.out.println("Item 1: " + list.getString(0)); 
System.out.println("Item 2: " + list.getInteger(1)); 
System.out.println("Item 3: " + list.getBoolean(2)); 
0

이 언급 한, 내가 PHP를 피할 것

의가이 같은 배열을 직렬화하는 가정 해 봅시다 가능한 경우 객체 직렬화. JSON (실제로 PHP에서 serialize()보다 빠름), 중고품 또는 좀 더 보편적 인 다른 형식을 사용하십시오.

선택의 여지가 없다면 Jackson Module에서 Java에서 직렬화 된 PHP를 읽고 쓸 수 있도록 노력하고 있습니다. Jackson은 훌륭한 JSON 파서이며 PHP 직렬화 형식이 꽤 비슷하기 때문에 잘 맞는 것 같았다. 아직 완전하지는 않습니다 (글쓰기는 아직 진행중입니다).

0

더 나은 선택은 JSONArray에 PHP를 직렬화 된 문자열을 구문 분석하는 것입니다,이 REPO (https://github.com/superalsrk/PhpSerialization)는 코드를 사용

<dependency> 
    <groupId>de.ailis.pherialize</groupId> 
    <artifactId>pherialize</artifactId> 
    <version>1.2.1</version> 
</dependency> 

다음의 pom.xml에 추가하면

3

도움이 될 수

MixedArray list = Pherialize.unserialize(data).toArray(); // data is string `enter code here`