A robust Java library for serializing and deserializing PHP serialized data format. This library provides type-safe handling of PHP serialized strings with full support for all PHP data types.
- Java 8 or higher
- 🚀 Complete PHP Data Type Support: Handles all PHP primitive types (string, integer, double, boolean, null) and complex types (arrays, objects)
- đź”’ Type Safety: Built with Checker Framework for enhanced null safety and type checking
- 🎯 Easy to Use: Simple API with intuitive encode/decode methods
- 📦 Zero Dependencies: Lightweight library with no external runtime dependencies
- đź§Ş Thoroughly Tested: Comprehensive test suite with 100%+ code coverage
- 🔄 Round-trip Compatible: Perfect serialization/deserialization fidelity
dependencies {
implementation 'bot.inker.serialize4j:serialize4j:1.0-SNAPSHOT'
}dependencies {
implementation("bot.inker.serialize4j:serialize4j:1.0-SNAPSHOT")
}<dependency>
<groupId>bot.inker.serialize4j</groupId>
<artifactId>serialize4j</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>import bot.inker.serialize4j.PhpSerializeCodec;
import bot.inker.serialize4j.value.*;
// Decode a PHP serialized string
PhpValue result = PhpSerializeCodec.decode("s:5:\"Hello\";");
String value = result.asString(); // "Hello"
// Decode an array
PhpValue arrayResult = PhpSerializeCodec.decode("a:2:{i:0;s:3:\"foo\";i:1;s:3:\"bar\";}");
PhpArray array = arrayResult.asArray();// Encode a string
String serialized = PhpSerializeCodec.encode(PhpValue.ofString("Hello"));
// Output: s:5:"Hello";
// Encode an array
PhpArray array = PhpArray.ofArray(
PhpValue.ofString("foo"),
PhpValue.ofString("bar")
);
String serializedArray = PhpSerializeCodec.encode(array);
// Output: a:2:{i:0;s:3:"foo";i:1;s:3:"bar";}| PHP Type | Java Representation | Factory Method |
|---|---|---|
string |
PhpString |
PhpValue.ofString(String) |
int |
PhpInteger |
PhpValue.ofInteger(long) |
float/double |
PhpDouble |
PhpValue.ofDouble(double) |
bool |
PhpBoolean |
PhpValue.ofBoolean(boolean) |
null |
PhpNull |
PhpValue.ofNull() |
| PHP Type | Java Representation | Description |
|---|---|---|
array |
PhpArray |
Indexed and associative arrays |
object |
PhpObject |
Class instances with properties |
// Create an indexed array
PhpArray indexedArray = PhpArray.ofArray(
PhpValue.ofString("item1"),
PhpValue.ofString("item2"),
PhpValue.ofInteger(42)
);
// Create an associative array
PhpArray assocArray = PhpArray.ofArrayMap(
PhpValue.ofString("name"), PhpValue.ofString("John"),
PhpValue.ofString("age"), PhpValue.ofInteger(30),
PhpValue.ofString("active"), PhpValue.ofBoolean(true)
);
// Access array elements
PhpValue name = assocArray.get(PhpValue.ofString("name"));
System.out.println(name.asString()); // "John"// Create a PHP object
PhpObject user = new PhpObject("User");
user.put(PhpValue.ofString("id"), PhpValue.ofInteger(123));
user.put(PhpValue.ofString("username"), PhpValue.ofString("john_doe"));
user.put(PhpValue.ofString("email"), PhpValue.ofString("john@example.com"));
// Serialize the object
String serialized = PhpSerializeCodec.encode(user);
System.out.println(serialized);
// Output: O:4:"User":3:{s:2:"id";i:123;s:8:"username";s:8:"john_doe";s:5:"email";s:19:"john@example.com";}try {
PhpValue result = PhpSerializeCodec.decode("invalid_data");
} catch (RuntimeException e) {
System.err.println("Failed to decode: "+e.getMessage());
}PhpValue value = PhpSerializeCodec.decode("i:42;");
switch (value.valueType()) {
case STRING ->System.out.println("It's a string: "+value.asString());
case INTEGER ->System.out.println("It's an integer: "+((PhpInteger) value).value());
case ARRAY ->System.out.println("It's an array with "+value.asArray().size() +" elements");
// ... handle other types
}The main entry point for serialization and deserialization operations.
static PhpValue decode(String input)- Decode a PHP serialized stringstatic String encode(PhpValue value)- Encode a PhpValue to PHP serialized format
Base class for all PHP value types.
PhpSerializeValueType valueType()- Get the type of this valueString asString()- Convert to string representationPhpArray asArray()- Cast to array (throws exception if not an array)
All value classes extend PhpValue and provide type-specific methods:
PhpString:String value(),static PhpString of(String)PhpInteger:long value(),static PhpInteger of(long)PhpDouble:double value(),static PhpDouble of(double)PhpBoolean:boolean value(),static PhpBoolean of(boolean)PhpNull: Singleton instancePhpNull.INSTANCEPhpArray: ImplementsMap<PhpValue, PhpValue>interfacePhpObject:String phpClass(), extends array functionality
// PHP session data: a:3:{s:7:"user_id";i:123;s:8:"username";s:8:"john_doe";s:10:"last_login";i:1628097234;}
String sessionData = "a:3:{s:7:\"user_id\";i:123;s:8:\"username\";s:8:\"john_doe\";s:10:\"last_login\";i:1628097234;}";
PhpArray session = PhpSerializeCodec.decode(sessionData).asArray();
long userId = ((PhpInteger) session.get(PhpValue.ofString("user_id"))).value();
String username = session.get(PhpValue.ofString("username")).asString();
long lastLogin = ((PhpInteger) session.get(PhpValue.ofString("last_login"))).value();
System.out.
println("User: "+username +" (ID: "+userId+")");
System.out.
println("Last login: "+Instant.ofEpochSecond(lastLogin));// Create a complex data structure
PhpArray response = PhpArray.ofArrayMap(
PhpValue.ofString("status"), PhpValue.ofString("success"),
PhpValue.ofString("data"), PhpArray.ofArrayMap(
PhpValue.ofString("users"), PhpArray.ofArray(
createUser("John", "john@example.com"),
createUser("Jane", "jane@example.com")
),
PhpValue.ofString("total"), PhpValue.ofInteger(2)
),
PhpValue.ofString("timestamp"), PhpValue.ofInteger(System.currentTimeMillis() / 1000)
);
String phpData = PhpSerializeCodec.encode(response);
// Ready to send to PHP applicationQ: Does this library handle PHP object serialization? A: Yes, the library fully supports PHP objects including class names and properties.
Q: Can I serialize custom Java objects to PHP format?
A: You need to manually convert your Java objects to PhpValue types first. The library provides the building blocks (
PhpObject, PhpArray, etc.) to construct any PHP data structure.
Q: Is this library thread-safe? A: Yes, all value types are immutable and the codec methods are stateless, making the library thread-safe.
Q: What about performance? A: The library is designed for correctness and type safety. For high-performance scenarios, consider implementing custom optimizations or caching frequently used values.
Q: Does it support PHP 8+ features? A: The library focuses on the serialization format, which has been stable across PHP versions. It supports all standard PHP data types that can be serialized.