Skip to content

io microsphere io serializer AbstractSerializer

github-actions[bot] edited this page Jul 29, 2026 · 1 revision

AbstractSerializer

Type: Class | Module: microsphere-java-core | Package: io.microsphere.io.serializer | Since: 1.0.0

Source: microsphere-java-core/src/main/java/io/microsphere/io/serializer/AbstractSerializer.java

Overview

Convenience base class for Serializer and {@liink Deserializer} implementations that handles null-safety and fixed-length byte-array validation, delegating the actual encode/decode logic to #doSerialize(Object) and #doDeserialize(byte[]).

The expected serialized byte-array length is determined by #calcBytesLength(). Sub-classes that always produce arrays of a fixed size (e.g. 4 bytes for Integer) should override this method to return that size; those with variable-length output should return IOUtils#UNBOUND_BYTES_SIZE.

Example Usage

{@code
  public class IntegerSerializer extends AbstractSerializer {

      public static final IntegerSerializer INTEGER_SERIALIZER = new IntegerSerializer();

### Declaration

```java
public abstract class AbstractSerializer implements Serializer, Deserializer
```

**Author:** Mercy

## Version Information

- **Introduced in:** `1.0.0`
- **Current Project Version:** `0.3.16-SNAPSHOT`

## Version Compatibility

This component is tested and compatible with the following Java versions:

| Java Version | Status |
|:---:|:---:|
| Java 8 | ✅ Compatible |
| Java 11 | ✅ Compatible |
| Java 17 | ✅ Compatible |
| Java 21 | ✅ Compatible |
| Java 25 | ✅ Compatible |

## Examples

```java
public class IntegerSerializer extends AbstractSerializer {

      public static final IntegerSerializer INTEGER_SERIALIZER = new IntegerSerializer();

      @Override
      protected int calcBytesLength() {
          return INTEGER_BYTES_LENGTH; // 4
      }

      @Override
      protected byte[] doSerialize(Integer value) {
          ByteBuffer buffer = ByteBuffer.allocate(INTEGER_BYTES_LENGTH);
          buffer.putInt(value);
          return buffer.array();
      }

      @Override
      protected Integer doDeserialize(byte[] bytes) {
          return ByteBuffer.wrap(bytes).getInt();
      }
  }

  byte[] bytes = INTEGER_SERIALIZER.serialize(42);  // 4-byte big-endian int
  int value   = INTEGER_SERIALIZER.deserialize(bytes); // 42
```

## Usage

### Maven Dependency

Add the following dependency to your `pom.xml`:

```xml

    io.github.microsphere-projects
    microsphere-java-core
    ${microsphere-java.version}

```

> **Tip:** Use the BOM (`microsphere-java-dependencies`) for consistent version management. See the [Getting Started](https://github.com/microsphere-projects/microsphere-java#getting-started) guide.

### Import

```java
import io.microsphere.io.serializer.AbstractSerializer;
```

## API Reference

### Public Methods

| Method | Description |
|--------|-------------|
| `getTargetType` | Resolves the serializable type parameter `T` via reflection and pre-calculates |
| `getBytesLength` | Returns the expected length of the serialized byte array, or `IOUtils#UNBOUND_BYTES_SIZE` |

### Method Details

#### `getTargetType`

```java
public final Class getTargetType()
```

Resolves the serializable type parameter `T` via reflection and pre-calculates
the expected serialized byte-array length.
/
public AbstractSerializer() {
JavaType type = from(getClass()).as(AbstractSerializer.class).getGenericType(0);
this.targetType = type.toClass();
this.bytesLength = calcBytesLength();
}

#### `getBytesLength`

```java
public int getBytesLength()
```

Returns the expected length of the serialized byte array, or `IOUtils#UNBOUND_BYTES_SIZE`
if variable-length serialization is used.

---

*This documentation was auto-generated from the source code of [microsphere-java](https://github.com/microsphere-projects/microsphere-java).*

Home

annotation-processor

java-annotations

java-core

java-test

jdk-tools

lang-model

Clone this wiki locally