Package com.lucimber.dbus.util
This package contains utility classes that provide common functionality used throughout the D-Bus client library. These utilities handle tasks like byte manipulation, string processing, validation, and other cross-cutting concerns.
Getting Started
For first-time users: Most utilities in this package are used internally.
However, LoggerUtils
can be helpful for debugging, and ByteBufferPoolManager
is
useful if you need to optimize memory usage in high-throughput scenarios.
Key Utilities
Byte Operations
Utilities for handling D-Bus binary data and byte array operations:
// Byte buffer utilities
ByteBuffer buffer = ByteBufferUtils.allocateDirect(1024);
ByteBufferUtils.writeBigEndianInt32(buffer, 42);
int value = ByteBufferUtils.readBigEndianInt32(buffer);
// Byte array manipulation
byte[] data = new byte[]{0x01, 0x02, 0x03, 0x04};
String hex = ByteUtils.toHexString(data);
byte[] restored = ByteUtils.fromHexString(hex);
String Processing
String utilities for D-Bus protocol requirements:
// String validation
boolean isValidObjectPath = StringUtils.isValidObjectPath("/org/example/Object");
boolean isValidInterface = StringUtils.isValidInterfaceName("org.example.Interface");
boolean isValidBusName = StringUtils.isValidBusName("org.example.Service");
// String normalization
String normalized = StringUtils.normalizeObjectPath("/org/example//Object/");
String sanitized = StringUtils.sanitizeString(userInput);
Validation Utilities
Validation helpers for D-Bus protocol compliance:
// Argument validation
ValidationUtils.requireNonNull(argument, "Argument cannot be null");
ValidationUtils.requireNonEmpty(collection, "Collection cannot be empty");
ValidationUtils.requireValidRange(value, 0, 100, "Value must be between 0 and 100");
// D-Bus specific validation
ValidationUtils.validateObjectPath(path);
ValidationUtils.validateInterfaceName(interfaceName);
ValidationUtils.validateSignature(signature);
Concurrent Utilities
Thread-safe utilities for concurrent operations:
// Thread-safe collections
ConcurrentMap<String, Object> cache = ConcurrentUtils.newConcurrentHashMap();
Set<String> syncSet = ConcurrentUtils.newConcurrentHashSet();
// Future utilities
CompletableFuture<String> future = FutureUtils.completedFuture("result");
CompletableFuture<Void> timeout = FutureUtils.withTimeout(
operation, Duration.ofSeconds(30));
Internal Framework Utilities
Logging Support
Structured logging utilities for consistent log formatting:
// Structured logging
Logger logger = LoggerFactory.getLogger(MyClass.class);
LogUtils.debug(logger, "Processing message",
"type", messageType,
"serial", serial,
"size", messageSize);
// Performance logging
try (TimingContext timing = LogUtils.startTiming("operation")) {
performOperation();
}
Configuration Helpers
Configuration parsing and validation utilities:
// Environment variable parsing
String dbusAddress = ConfigUtils.getEnvVar("DBUS_SESSION_BUS_ADDRESS");
int timeout = ConfigUtils.getEnvInt("DBUS_TIMEOUT", 30);
boolean enabled = ConfigUtils.getEnvBoolean("DBUS_DEBUG", false);
// Configuration validation
ConfigUtils.validateConfiguration(config);
Properties props = ConfigUtils.loadProperties("dbus.properties");
Resource Management
Utilities for managing system resources:
// Resource cleanup
try (CloseableResource resource = ResourceUtils.acquire()) {
// Use resource
} // Automatically cleaned up
// Memory management
long memoryUsage = ResourceUtils.getMemoryUsage();
ResourceUtils.runGC();
boolean lowMemory = ResourceUtils.isLowMemory();
Data Structure Utilities
Collection Helpers
Utilities for working with collections and data structures:
// Immutable collections
List<String> immutableList = CollectionUtils.immutableList("a", "b", "c");
Set<Integer> immutableSet = CollectionUtils.immutableSet(1, 2, 3);
Map<String, String> immutableMap = CollectionUtils.immutableMap(
"key1", "value1",
"key2", "value2");
// Collection operations
List<String> filtered = CollectionUtils.filter(list, String::isEmpty);
List<Integer> mapped = CollectionUtils.map(list, String::length);
Optional<String> found = CollectionUtils.find(list, "target"::equals);
Caching Utilities
Simple caching mechanisms for performance optimization:
// LRU cache
Cache<String, Object> cache = CacheUtils.createLRUCache(1000);
cache.put("key", computeExpensiveValue());
Object value = cache.get("key");
// Time-based cache
Cache<String, Object> timeCache = CacheUtils.createTimeCache(
Duration.ofMinutes(5));
Protocol Utilities
Marshalling Helpers
Utilities for D-Bus message marshalling and unmarshalling:
// Alignment utilities
int alignedPosition = AlignmentUtils.alignTo(position, 8);
int padding = AlignmentUtils.calculatePadding(position, 4);
// Signature parsing
SignatureParser parser = new SignatureParser("a{sv}");
SignatureType type = parser.parseNext();
boolean isContainer = SignatureUtils.isContainer(type);
Endianness Handling
Utilities for handling byte order in D-Bus messages:
// Endianness conversion
ByteOrder order = EndiannessUtils.getSystemByteOrder();
int swapped = EndiannessUtils.swapInt32(value);
short swapped16 = EndiannessUtils.swapInt16(value);
// D-Bus specific endianness
boolean isLittleEndian = EndiannessUtils.isDBusLittleEndian(flags);
Testing Utilities
Test Helpers
Utilities for testing D-Bus applications:
// Test data generation
DBusString testString = TestUtils.randomDBusString(100);
DBusArray<DBusInt32> testArray = TestUtils.randomDBusArray(10, DBusInt32.class);
// Mock utilities
Connection mockConnection = TestUtils.createMockConnection();
InboundSignal mockSignal = TestUtils.createMockSignal("org.test.Signal");
// Assertion helpers
TestUtils.assertValidObjectPath(path);
TestUtils.assertValidSignature(signature);
TestUtils.assertMessageEquals(expected, actual);
Performance Utilities
Profiling Support
Utilities for performance monitoring and profiling:
// Performance measurement
Stopwatch stopwatch = PerformanceUtils.startStopwatch();
performOperation();
Duration elapsed = stopwatch.elapsed();
// Memory profiling
MemoryProfiler profiler = PerformanceUtils.startMemoryProfiler();
performMemoryIntensiveOperation();
MemoryUsage usage = profiler.getUsage();
Best Practices
- Null Safety: All utility methods handle null inputs gracefully
- Immutability: Utility classes are stateless and thread-safe
- Performance: Utilities are optimized for common use cases
- Validation: Input validation is performed where appropriate
- Documentation: All utilities are thoroughly documented
Internal Use
While this package is primarily for internal framework use, some utilities may be useful for application developers. However, these utilities are not part of the public API and may change between versions.
- Since:
- 1.0
- See Also:
-
ClassDescriptionA thread-safe ByteBuffer pool to reduce garbage collection pressure by reusing ByteBuffer instances for encoding/decoding operations.A singleton manager for ByteBuffer pooling with performance metrics.DBusPromise<T>Promise-style utilities for working with D-Bus asynchronous operations.Exception thrown when a D-Bus error is received.Exception thrown when a D-Bus operation times out.Comprehensive error recovery manager for D-Bus operations.Circuit breaker implementation for preventing cascading failures.Configuration for circuit breaker operations.Exception thrown when circuit breaker is in OPEN state.Error classification for determining retry strategies.Configuration for retry operations.Frame recovery manager for handling corrupted D-Bus messages and frame synchronization.Types of frame corruption.Result of frame analysis.Frame diagnostic information.Frame recovery statistics.Utility class for extracting typed values from D-Bus message header fields.Provides common methods necessary for logging and standard logging markers for categorizing log output.Utility class for memory optimization and monitoring in D-Bus Client Java.Message batcher for improved throughput by grouping multiple small messages.Utility class for common methods used for SASL authentication.