Post

Thao tác với kiểu dữ liệu Byte trong Java

Biến trên thực tế là bộ nhớ để lưu một giá trị nào đó. Khi khai báo biến tức là bạn đang khai báo với hệ thống rằng bạn cần một không gian trong bộ nhớ để lưu giá trị của biến. Dựa trên kiểu dữ liệu của một biến, hệ điều hành cấp phát bộ nhớ và quyết định cái gì có thể được lưu giữ trong bộ nhớ dành riêng đó.

Trong Java có 2 kiểu dữ liệu có sẵn: kiểu dữ kiệu nguyên thuỷ (Primitive) và kiểu đối tượng (Object). Để tìm hiểu hết đống kiểu dữ liệu này thật là mất khá nhiều thời gian, nên trong bài viết này, mình chỉ tóm gọn cho các bạn hiểu về byte – một kiểu primitive trong Java.

1. Kiểu dữ liệu byte là gì?

Nếu bạn đã từng xem qua các tài liệu về máy tính chắc hẳn đã nghe qua hai khái niệm bytebit. Song, trong Java cũng thế, Java dựa trên máy tính mà lập trình và hoạt động được nên cũng có một kiểu dữ liệu byte nhằm giúp các lập trình viên lưu trữ một số giá trị biến phù hợp.

Vậy byte trong java là gì?

Byte là một trong những kiểu dữ liệu nguyên thủy trong Java, là kiểu dữ liệu số nguyên nhỏ nhất. Điều này có nghĩa byte là kiểu dữ liệu được đóng gói sẵn trong ngôn ngữ lập trình và việc của bạn là sử dụng nó khi nào cho hợp lý.

Một byte Java có cùng kích thước với một byte trong bộ nhớ máy tính: đó là 8 bit và có thể giữ các giá trị từ -128 đến 127.

Hãy cẩn thận khi sử dụng byte, đặc biệt nếu số có khả năng lớn hơn 127 (hoặc nhỏ hơn -128). Không có cách nào để lưu trữ giá trị lớn hơn phạm vi trên vào một byte, lúc đó chương trình chắc chắn sẽ bị tràn bộ nhớ.

Bạn hãy nhớ kỹ một điều rằng là, Byte chỉ dùng để lưu các số nguyên có kích thước 8 bit, giá trị nhỏ nhất là -2^7 và lớn nhất là 2^7-1. Giá trị mặc định bằng 0.

Kiểu dữ liệu byte được sử dụng để lưu giữ khoảng trống trong các mảng lớn, chủ yếu là các số nguyên.

Biến loại byte đặc biệt hữu ích khi bạn đang làm việc với luồng dữ liệu từ mạng hoặc tệp. Chúng cũng hữu ích khi bạn đang làm việc với dữ liệu nhị phân thô có thể không tương thích trực tiếp với các loại Java tích hợp khác.

2. Một số thao các cơ bản với kiểu dữ liệu byte trong Java

Là một kiểu dữ liệu nguyên thủy, việc khai báo một biến byte cũng đơn giản như các kiểu dữ liệu khác. Cú pháp đơn giản nhất để khai báo một byte là:

1
byte <tên biến> = [giá trị biến];

Ví dụ:

1
byte byteTest = 100;

Để hiểu hơn về byte và cách sử dụng, chúng ta cùng lướt qua một vài ví dụ nhé.

Ví dụ 2: byte sử dụng lớp Byte.

1
2
3
4
5
6
7
8
9
10
11
12
13
public class demo {

	public static void main(String[] args) {

		byte b = 10; // khai báo một biến byte và gán giá trị = 10

		Byte n1 = new Byte(b);
		Byte n2 = new Byte("4");

		System.out.println(n1); // 10
		System.out.println(n2);// 4
	}
}

Bạn có thể thấy trong chương trình, mình sử dụng lớp Byte để tạo một đối tượng bởi vì nếu gọi các giá trị biến bằng tên lớp thì nó sẽ báo lỗi biên dịch. Đó là lý do tại sao lại sử dụng lớp Byte.

Ví dụ 3: Sử dụng biến byte trong phép cộng

Trong ví dụ dưới đây, mình sử dụng kiểu byte trong lớp CongByte để thêm hai số kiểu byte và lưu giá trị nó lại, bạn đoán xem kết quả như thế nào?

1
2
3
4
5
6
7
8
public class CongByte {
    public static void main(String[] args) {
        byte a = 30;
        byte b = 40;    
        byte c = (byte) (a + b);
        System.out.println("Ket qua = " + c); // 70
    }
}

3. Chuyển đổi qua lại giữa byte array và String

Cách chuyển đổi String thành một byte array

Chúng ta có thể sử dụng phương thức getBytes() của lớp String để thực hiện chuyển chuỗi thành một chuỗi các byte bằng cách sử dụng bộ ký tự mặc định.

Đây là một chương trình đơn giản chỉ ra cách chuyển đổi Chuỗi thành mảng byte trong java.

1
2
3
4
5
6
7
8
9
10
import java.util.Arrays;

public class StringToArrayByte {
	public static void main(String[] args) {
		String str = "TungDaDev";
		byte[] byteArr = str.getBytes();
		// in các phần tử byte[]
		System.out.println("Ket qua la: " + Arrays.toString(byteArr));
		// Ket qua la: [84, 117, 110, 103, 68, 97, 68, 101, 118]
	}

Cách chuyển đổi byte arry thành String

Hãy cùng xem một chương trình đơn giản chỉ ra cách chuyển đổi mảng byte thành Chuỗi trong Java.

1
2
3
4
5
6
7
8
9
10
11
12
public class ByteArrayToString {
	public static void main(String[] args) {
		byte[] byteArray = { 'C', 'R', '7'};
        byte[] byteArray1 = { 67, 82, 55 };

		String str = new String(byteArray);
		String str1 = new String(byteArray1);

		System.out.println(str); // CR7
		System.out.println(str1); // CR7
	}
}

Bạn có nhận thấy rằng tôi đang cung cấp các kí tự trong khi tạo mảng byte không?

Nó hoạt động nhờ tính năng tự động chuyển đổi từ “C” sang 67 trong byte, tương tự với các giá trị khác. Đó là lý do tại sao kết quả trả về là như nhau cho cả chuyển đổi mảng byte sang chuỗi.

Ngoài ra khi làm việc với lớp bao bọc của chính mình là Byte (chú ý là trong Java byte khác với Byte nhé) các bạn có thể tham khảo một số phương thức nâng cao được hỗ trợ như:

  • valueOf() -> trả về đối tượng Byte được khởi tạo với giá trị được cung cấp.
  • parseByte() -> trả về giá trị byte bằng cách phân tích chuỗi trong cơ số được cung cấp. Khác với valueOf () vì nó trả về một giá trị byte nguyên thủy và valueOf () trả về đối tượng Byte.
  • byteValue() -> trả về một giá trị byte tương ứng với đối tượng Byte.
  • intValue() -> trả về một giá trị int tương ứng với đối tượng Byte (tương tự với long, double, float).
  • compareTo() -> Được sử dụng để so sánh hai đối tượng Byte cho đẳng thức số.
  • Và nhiều phương thức khác nữa, …

Lời kết

Làm việc với byte không phức tạp như bạn nghĩ, nó vốn là kiểu dữ liệu cơ bản và đơn giản. Nhưng nhất định bạn phải am hiểu về nó thì mới sử dụng được một cách thuần thục và đúng nơi đúng lúc được.

Bản thân mình tiếp xúc với Java cũng đã khá lâu, nhưng vẫn chưa sử dụng hết các phương thức mà Byte hỗ trợ, nên bạn cứ dần dần mà tìm hiểu, không vội được đâu nhaaa…!

Bài viết mang tính chất “ghi chú, lưu trữ, chia sẻ và phi lợi nhuận”.
Nếu bạn thấy hữu ích, đừng quên chia sẻ với bạn bè và đồng nghiệp của mình nhé!

Happy coding! 😎 👍🏻 🚀 🔥

This post is licensed under CC BY 4.0 by the author.