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

android - trình nạp lớp gói/tuần tự hóa

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 13:32:16 27 4
mua khóa gpt4 Nike

Tôi muốn biết liệu có thể đóng gói (hoặc tuần tự hóa) khôngTrình tải lớp 以通过 Tin nhắn Gửi nó đến một quy trình khác trong Android. Trình tải lớpkhông được thực hiện Có thể gửi được/Serializable.

Có lời khuyên nào về cách thực hiện việc này không? Cảm ơn trước!

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

trình nạp lớp

Trình nạp lớp về cơ bản là một bảng băm có các mục nhập được khóa theo tên lớp và trỏ đến mã byte được tải vào VM. Tất nhiên, mã byte được tải vào VM tất nhiên nằm ngoài giới hạn đối với quy trình Java, vì Java không cho phép bạn thao tác mã. Lưu ý rằng mã byte đã được JIT VM biên dịch thành mã dành riêng cho CPU và sẽ chứa các vị trí bộ nhớ và các cấu trúc cấp thấp khác.

Trình nạp lớp có thể được chia sẻ trong cùng một VM (thông qua tuần tự hóa hoặc các phương tiện khác), vì trình nạp lớp vẫn có thể trỏ tớinguyên bảnTuy nhiên, để tuần tự hóa và sau đó giải tuần tự hóa sang một máy ảo khác, trình nạp lớp phải tuần tự hóa mã byte. Đó là vấn đề.

Trình nạp lớp tuần tự hóa

Là một thử nghiệm suy nghĩ, chúng ta sẽ tuần tự hóa mã như thế nào để các quy trình khác có thể giải tuần tự hóa nó?

Chúng ta phải xử lý nó như một khối có kích thước lớp để thực thể được tuần tự hóa có toàn bộ giao diện lớp. Chúng ta sẽ phải "giải quyết" các con trỏ tới các ký hiệu trong mã byte. Chúng ta cũng phải sao chép toàn bộ bảng chuỗi và ký hiệu cho lớp để việc xem xét nội tâm có thể tiếp tục hoạt động.

Những gì chúng ta vừa xác định chính là tệp lớp (việc khởi tạo các thành viên của lớp hơi khác so với việc tuần tự hóa)

Hãy để tôi nhắc lại:tập tin lớp ĐúngPhiên bản nối tiếp của lớp.

Câu hỏi hóc búa về DEX

Tuy nhiên, Android biên dịch trước các tệp lớp thành DEX. Đây là một tệp duy nhất chứa phiên bản JAR được tối ưu hóa - các lớp được liên kết trước với nhau và tất cả các ký hiệu chuỗi đều nằm trong cùng một nhóm ký hiệu/chuỗi được chia sẻ. Do đó, trong Android, thành phần nhỏ nhất có thể chia sẻ là DEX.

Trong nhiều trường hợp, nhà sản xuất ứng dụng hoặc thiết bị tạo tệp ODEX. Đây là tệp DEX được biên dịch cho một CPU và kiến ​​trúc cụ thể (bao gồm cả hệ thống endian lớn hoặc endian nhỏ).

Trong Android, bạn có thể coi tệp ODEX là trình nạp lớp tuần tự hóa.

Tải lớp từ xa

Điểm mấu chốt của vấn đề là làm thế nào một quy trình tải các tệp lớp mà quy trình ban đầu có thể nhìn thấy được. yorkwđề nghị mộttrình nạp lớpAnh ấy/cô ấy đã tìm ra ai đã làm những gì tôi đề nghị. Phương thức này là quy trình đầu tiên triển khai dịch vụ tra cứu lớp và trả về mã byte của lớp. Tuy nhiên, do các vấn đề DEX được liệt kê ở trên nên ứng dụng này không chạy trực tiếp trên Android.

Giải pháp?

Do đó, mọi giải pháp bạn triển khai sẽ dựa trên (O)DEX. Về cơ bản, bạn cần yêu cầu khách hàng giao tiếp với máy chủ của mình và yêu cầu tệp (O)DEX, sau đó tệp này sẽ được tải dưới dạng một thực thể duy nhất. Đang tải nó sẽ trả về trình nạp lớp mới của bạn

Hiện tại, tôi chưa bao giờ làm điều này và hoàn toàn có khả năng Android chỉ cho phép tải một tệp DEX, do đó phá vỡ phương pháp này. YMMV

Tôi hy vọng cuộc thảo luận này sẽ giúp...


TL;DR Tuy nhiên, bạn không thể tuần tự hóa trình nạp lớp;khả thiCó thể thuyết phục một quy trình khác tải tệp (O)DEX, điều này sẽ tạo ra kết quả tương tự.

Về trình nạp lớp android - gói/tuần tự hóa, 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/11538472/

27 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