Tôi đang làm việc để chuyển đổi một loạt các tệp kết xuất cơ sở dữ liệu MySQL được phân tách bằng tab cũ thành Bộ đệm giao thức và đã chạy vào một thẻ. Bảng MySQL bao gồm một trường kiểu int(11) unsigned
, mà tôi đã ánh xạ tới protobuf uint32
trong tệp .proto
. Khi phân tích cú pháp các bản ghi MySQL và cố gắng chuyển đổi chúng thành một thông điệp protobuf, nó sẽ hấp dẫn để phân tích trường đó bằng cách sử dụng Integer.valueOf(String)
(hoặc Long.valueOf(String)
để tránh tràn). Tuy nhiên, Protocol Buffers Language Guide chỉ ra here rằng trong Java, uint32
s được thể hiện bằng kiểu dữ liệu int
, nhưng bit đầu tiên được hiểu là bit bậc cao nhất chứ không phải bit dấu.Làm cách nào để chuyển đổi các int không dấu của MySQL sang các Uint32 của Protocol Buffer trong Java?
Vì vậy, trước khi tôi đi viết của riêng tôi String
->uint32
-flavored- int
phân tích cú pháp, tôi nghĩ rằng nó là giá trị yêu cầu cho dù bất cứ ai khác đã giải quyết vấn đề cụ thể này. Cách chính xác để chuyển đổi một biểu diễn String
của MySQL int unsigned
thành Bộ đệm giao thức uint32
bằng Java là gì?
Tôi đã đi đến một kết luận tương tự, nhưng bạn thực hiện nó rõ ràng hơn tôi đã làm. Điều này cho thấy một câu hỏi tương tự: làm thế nào để phân tích cú pháp 'unsigned bigint' thành protobuf' uint64' bằng Java? –
Giải pháp của bạn cũng cho thấy rằng việc chuyển đổi có thể được thực hiện đơn giản bằng cách truyền lại từ 'int' sang' long', điều này rất hay. –
@JoshHansen, tôi đã cập nhật câu trả lời của tôi để đáp lại cả nhận xét của bạn. – MvG