cuốn sách gpt4 ai đã làm

java 8: cách truyền phát một mảng int, trích xuất byte thấp và tạo một mảng byte

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 08:35:48 25 4
mua khóa gpt4 Nike

Để kết nối hai thư viện, tôi cần chuyển đổi một mảng int[] chứa byte thành mảng byte[] chỉ chứa byte thấp. (Tôi cần che dấu các số nguyên bằng 0xFF và lưu trữ chúng trong một mảng byte[].) Tôi chỉ có thể tìm thấy các ví dụ về cách thực hiện việc này trong khi chuyển đổi tất cả 4 byte của int mà tôi không cần.

Như một bài tập, tôi muốn thực hiện điều này trong Java 8 thuần túy bằng cách sử dụng một cái gì đó ngắn gọn và hiệu quả (nghĩa là mã Java 8 hợp lệ không có thư viện, lệnh gọi hoặc SOUP bên ngoài). Tôi đã thử sử dụng các luồng nhưng không thể tìm thấy bản đồ hợp lệ();

byte[] mybytarray = Arrays.asList(myintarray).stream().map(v -> v & 0xFF).collect(toList()).toArray(byte[]::new);

Nhưng tôi gặp lỗi "Không thể suy ra các tham số loại của bản đồ (hàm)" và tôi không hiểu cách viết bản đồ.

câu trả lời hay nhất

Thật không may, Steam không hỗ trợ trực tiếpbyte Loại; IE,. không có gì giống như intdài1 như thế luồng byte Chuyên môn hóa.

Nếu bạn nhất quyết sử dụng luồng, một giải pháp khá hiệu quả là sử dụng ByteArrayĐầu raStream Để thu thập byte:

Bao bì ByteArrayOutputStream(myintarray.length);
Arrays.stream(myintarray).forEachOrdered(i -> baos.write((byte)i));
byte[] byteArray = baos.toArray();

Điều này chỉ sao chép mảng một lần. Vòng lặp for và chèn mảng rõ ràng sẽ tốt hơn:

byte[] byteArray = byte mới[myintarray.length];
for (int i = 0; i < myintarray.length; i++) {
byteArray[i] = (byte)myintarray[i];
}

Có thể sạch hơn phiên bản luồng và nhanh như bạn nhận được trong Java.

Nếu bạnthực sự nhấn mạnhsử dụng Suối trong số 1 lớp lót bạn có thể nhận được Byte[] thay vì byte[] Như thế này:

Arrays.stream(myintarray).boxed().map(Integer::byteValue)
.collect(Collectors.toList()).toArray(new Byte[myintarray.length]);

Điều này liên quan đến rất nhiều hoạt động tạo nhóm và bạn kết thúc với một kết quả lớn hơn và chậm hơn Byte[], nhưng này, bạn đã sử dụng mộtJava 8 thuần túy Giải pháp, phải không?


1 vụ nổ tổ hợp Bất chấp sự tranh luận, xem xét byte[] Đối với tôi, bản chất quan trọng của điều này dường như luôn là một thiếu sót đáng tiếc của nhiều hoạt động định hướng đầu vào/đầu ra.

Về java 8: cách truyền phát một mảng int, trích xuất các byte thấp và tạo một mảng byte, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/42867721/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress