http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html, kích thước ký tự là 16 bit, tức là 2 byte. bằng cách nào đó tôi nhớ lại 8 bit của nó tức là 1 byte. Để xóa sự nghi ngờ của tôi, tôi đã tạo một tệp văn bản có ký tự đơn "a" và lưu nó. Sau đó, tôi kiểm tra kích thước của tập tin, 1 byte của nó, tức là 8 bit. Tôi bối rối kích thước của ký tự? Nếu 2 byte của nó, tại sao kích thước tập tin là 1 byte và nếu nó là 1 byte tại sao liên kết nói 2 byte?Kích thước thẻ 8 bit hoặc 16 bit?
Trả lời
A char
bằng Java là đơn vị mã UTF-16. Nó không nhất thiết phải là một ký tự Unicode hoàn chỉnh, nhưng nó có hiệu quả là một số nguyên 16 bit không dấu.
Khi bạn viết văn bản vào một tệp (hoặc theo cách khác chuyển đổi văn bản thành chuỗi byte), thì dữ liệu sẽ phụ thuộc vào mã hóa bạn sử dụng. Ví dụ, nếu bạn sử dụng ASCII hoặc ISO-8859-1 thì bạn bị giới hạn về ký tự nào bạn có thể viết, nhưng mỗi ký tự sẽ chỉ là một byte. Nếu bạn sử dụng UTF-16, thì mỗi Java char
sẽ được chuyển đổi thành chính xác hai byte - nhưng một số ký tự Unicode có thể mất bốn byte (được biểu thị bằng hai giá trị Java char
).
Nếu bạn sử dụng UTF-8, thì độ dài của thậm chí một đơn lẻ Java char
ở dạng được mã hóa sẽ phụ thuộc vào giá trị.
Lưu ý rằng tệp văn bản thực sự có định dạng/ký tự được liên kết với chúng. Các tệp văn bản thường sẽ được lưu ở định dạng UTF-8, là 8 bit cho mỗi ký tự trừ khi ký tự là "đặc biệt".
Định nghĩa của bạn về "đặc biệt" là gì? * Bất cứ điều gì * không phải ASCII? –
Tôi đã cố gắng giữ cho câu trả lời ngắn gọn :-) cho một định nghĩa đầy đủ xem [Wikipedia] (http://en.wikipedia.org/wiki/UTF-8) – vogomatix
Khi "súc tích" có nghĩa là sử dụng một thuật ngữ mờ ảo như "nhân vật đặc biệt", tôi không nghĩ rằng nó sử dụng nhiều. –
Một char trong Java là 2 byte lớn (như phạm vi giá trị hợp lệ đề xuất). Nhưng nó không nhất thiết có nghĩa là mọi biểu diễn của một ký tự dài 2 byte. Ví dụ, nhiều mã hóa sẽ chỉ dự trữ 1 byte cho mỗi ký tự (hoặc sử dụng 1 byte cho các ký tự thường xuyên nhất) .Nếu mã hóa mặc định nền tảng là mã hóa 1 byte chẳng hạn như ISO-8859-1 hoặc mã hóa có độ dài biến đổi như vậy như UTF-8, nó có thể dễ dàng chuyển đổi 1 byte đó thành một ký tự đơn.
- 1. Chuỗi C++: mã hóa UTF-8 hoặc 16 bit?
- 2. Độ sâu bit 16 bit
- 3. 16 bit grayscale png
- 4. Chuyển đổi độ sâu 16 bit CvMat * sang độ sâu 8 bit
- 5. Làm thế nào để chuyển đổi 8 bit đến 16 bit trong VHDL?
- 6. Python và 16 bit PGM
- 7. Tại sao địa chỉ 16 bit có kết quả bù đắp 12 bit ở kích thước trang 4KB?
- 8. Tìm hiểu kích thước đối tượng CLR giữa 32 bit so với 64 bit
- 9. Tiền tố kích thước vận hành ở chế độ 16 bit
- 10. Trộn mã 32 bit và 16 bit với nasm
- 11. Kích thước bit của GHC's Int Type
- 12. Đếm kích thước bit/byte của mảng
- 13. Kích thước của cấu trúc trên 32 bit và 64 bit
- 14. Tìm trình biên dịch 16 bit x86
- 15. Rõ ràng thấp hơn 16 bit
- 16. Dung lượng "bit dữ liệu" so với kích thước "overhead bit"?
- 17. Kích thước bit dài trên Windows 64 bit là bao nhiêu?
- 18. Kích thước của "dài" trong máy tính 128-bit?
- 19. Kích thước tối đa của một mảng trong 32 bit?
- 20. Tại sao printf pad một đĩa 8 bit đến 32 bit?
- 21. cách chuyển đổi hai byte thành một số 16 bit?
- 22. transpose cho 8 thanh ghi của các nguyên tố 16-bit trên SSE2/SSSE3
- 23. OpenCV - Đọc hình ảnh màu xám 16 bit
- 24. Con trỏ C++ có kích thước bit cụ thể
- 25. Tốc độ bit và kích thước tệp video
- 26. Tầm quan trọng của số trang và kích thước trang cuối cùng trong MZ (DOS, 16 bit) .EXE header
- 27. Làm cách nào để chuyển đổi UUID dịch vụ 16 bit Bluetooth thành UUID 128 bit?
- 28. khi hai dữ liệu được ký 16 bit được nhân lên, kích thước của kết quả là gì?
- 29. Java JDK 32 bit và 64 bit
- 30. Nhận các số nguyên 16 bit trong Python
1 ký tự là 8 bit là một byte –
@AliGajani: Thật đơn giản là không đúng sự thật. –
@AliGajani: Xem lại thẻ ngôn ngữ và sau đó xem xét cách các ký tự được mã hóa trong Java. Mặc dù vậy, 8-bit không nhất thiết phải là một byte. –