2014-06-07 15 views
5

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?

+0

1 ký tự là 8 bit là một byte –

+8

@AliGajani: Thật đơn giản là không đúng sự thật. –

+2

@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. –

Trả lời

23

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ị.

0

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".

+0

Định nghĩa của bạn về "đặc biệt" là gì? * Bất cứ điều gì * không phải ASCII? –

+0

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

+4

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. –

0

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.

Các vấn đề liên quan