Tôi cần phải phân tích cú pháp và mã hóa thành định dạng thông điệp nhị phân cũ trong Java. Tôi bắt đầu bằng cách sử dụng DataOutputStream để đọc/ghi các kiểu nguyên thủy nhưng vấn đề tôi gặp phải là định dạng tin nhắn không sắp xếp độc đáo với các offset byte và bao gồm các cờ bit.Làm cách nào để phân tích/mã hóa các định dạng thông báo nhị phân?
Ví dụ tôi phải đối phó với những thông điệp như thế này:
+----------+---+---+----------+---------+--------------+
+uint32 +b +b + uint32 +4bit enum+32 byte string+
+----------+---+---+----------+---------+--------------+
đâu (b) là một lá cờ một chút. Vấn đề là các kiểu nguyên thủy java không liên kết với các ranh giới byte vì vậy tôi sẽ không thể sử dụng DataOutputStream để mã hóa điều này vì loại mức thấp nhất mà tôi có thể viết là một byte.
Có thư viện, chuẩn hoặc bên thứ ba nào để xử lý các định dạng thông báo mức bit tùy ý không?
Chỉnh sửa: Nhờ @Software Monkey vì buộc tôi phải xem thông số kỹ thuật của tôi chặt chẽ hơn. Spec tôi đang sử dụng thực sự sắp xếp trên ranh giới byte để DataOutputStream là thích hợp. Cho câu hỏi ban đầu của tôi mặc dù tôi đã đi với giải pháp được đề xuất bởi @emboss.
Chỉnh sửa: Mặc dù định dạng thông báo cho câu hỏi này được phát hiện là trên ranh giới byte Tôi đã gặp một định dạng thư khác có thể áp dụng cho câu hỏi gốc. Định dạng này định nghĩa một ánh xạ ký tự 6 bit trong đó mỗi ký tự thực sự chỉ chiếm 6 bit, không phải là byte đầy đủ, vì vậy các chuỗi ký tự không được căn chỉnh trên các ranh giới byte. Tôi đã phát hiện một số luồng đầu ra nhị phân giải quyết vấn đề này. Như thế này: http://introcs.cs.princeton.edu/java/stdlib/BinaryOut.java.html
Đây là một rất không bình thường spec; với nhiều năm kinh nghiệm của tôi trong comms dây, tôi sẽ đặt câu hỏi liệu bạn có bố trí đó chính xác. Đặc biệt, uint32 thứ hai của bạn và chuỗi byte 32 bắt đầu giữa chừng thông qua một byte - chắc chắn là không! Nó không phải là bất thường để đóng gói cờ vào bit trong một byte, từ hoặc dword cho một giao thức dây, nhưng để có sai lệch đầy đủ byte, từ, và dwords là ngu ngốc. –
Ack, bạn đã đúng. Tôi đã có một hình ảnh nghèo của các định dạng tin nhắn để đi ra khỏi và bây giờ tôi thấy 'phụ tùng bit' chia lưới giữa các cờ bit và nguyên thủy sắp xếp tiếp theo nó trên một ranh giới byte. Cảm ơn! – kenen
Bạn nên cập nhật câu hỏi của mình với thông số thực tế (và ghi chú sao cho câu trả lời của hình nổi không nhìn ra ngoài). –