Java String getBytes() Method

Beginner
⏱️ 9 min read
📚 Updated: Jul 2026
🎯 5 Examples
String Methods

What You’ll Learn

The getBytes() method encodes a String into a byte[] using a character set. Computers store and transmit bytes, not Java characters—so this method bridges text and binary data for files, networks, and cryptography.

01

String to bytes

Encode text.

02

Instance method

text.getBytes().

03

Charset matters

UTF-8, default.

04

byte[] return

Raw byte array.

05

Round trip

new String(bytes).

06

I/O & network

Files, sockets.

Definition and Usage

In Java, getBytes() is an instance method on java.lang.String. It converts the string’s characters into bytes according to a charset. The result is a new byte[] you can write to a file, send over a network, or pass to APIs that expect binary data.

To convert bytes back into text, use the String constructor new String(byte[], charset) with the same charset you used for encoding.

💡
Beginner Tip

For new code, prefer text.getBytes(StandardCharsets.UTF_8) over the no-argument form. UTF-8 behaves the same on Windows, macOS, and Linux.

📝 Syntax

The getBytes() method has several overloads in the String class:

java
public byte[] getBytes()
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException
public byte[] getBytes(Charset charset)

Parameters

  • No arguments — uses the platform default charset.
  • charsetName — name of the charset (for example "UTF-8").
  • charset — a Charset object (for example StandardCharsets.UTF_8).

Return Value

Returns a new byte[] containing the encoded bytes. The array length may differ from the string’s length() when characters use multiple bytes (common in UTF-8).

Exceptions

getBytes(String charsetName) throws UnsupportedEncodingException if the charset name is not supported.

⚡ Quick Reference

ExpressionMeaning
"Hi".getBytes()Platform default encoding
"Hi".getBytes(StandardCharsets.UTF_8)UTF-8 bytes (recommended)
new String(bytes, StandardCharsets.UTF_8)Decode bytes back to String
"A".getBytes(StandardCharsets.UTF_8).length1 (single ASCII byte)
text.getBytes("UTF-8")String charset name (checked exception)
UTF-8 encode
s.getBytes(StandardCharsets.UTF_8)

Portable default

UTF-8 decode
new String(data, StandardCharsets.UTF_8)

Reverse operation

Length
bytes.length

Byte count ≠ char count

Avoid
getBytes() // platform default

In cross-platform apps

Examples Gallery

These programs run in Java 8+. They show default encoding, explicit UTF-8, decoding back to a string, inspecting byte values, and comparing byte length with string length.

📚 Getting Started

Convert a string to bytes and back using the platform default charset.

Example 1 — Default Platform Encoding

The no-argument form uses the JVM’s default charset.

java
public class GetBytesExample {
    public static void main(String[] args) {
        String text = "Hello, Java!";

        byte[] bytes = text.getBytes();
        String restored = new String(bytes);

        System.out.println("Bytes length: " + bytes.length);
        System.out.println("Restored:     " + restored);
    }
}

How It Works

Each character is encoded into bytes. Decoding with new String(bytes) using the same default charset reproduces the original text for ASCII content like this example.

Example 2 — Explicit UTF-8 Encoding

Use StandardCharsets.UTF_8 for predictable, cross-platform encoding.

java
import java.nio.charset.StandardCharsets;

public class Utf8GetBytes {
    public static void main(String[] args) {
        String text = "Hello, Java!";

        byte[] utf8Bytes = text.getBytes(StandardCharsets.UTF_8);
        String decoded = new String(utf8Bytes, StandardCharsets.UTF_8);

        System.out.println(decoded);
    }
}

How It Works

UTF-8 encodes basic English letters as one byte each. Specifying the charset on both encode and decode guarantees the same rules are applied.

📈 Practical Patterns

Inspect bytes, compare lengths, and understand encoding size.

Example 3 — Encode and Decode Round Trip

Verify that bytes can travel through binary storage and return as the same text.

java
import java.nio.charset.StandardCharsets;

public class RoundTripDemo {
    public static void main(String[] args) {
        String original = "CodeToFun";

        byte[] payload = original.getBytes(StandardCharsets.UTF_8);
        String copy = new String(payload, StandardCharsets.UTF_8);

        System.out.println("Same text? " + original.equals(copy));
    }
}

How It Works

This pattern mirrors sending bytes over a network or writing them to a file, then reading them back with the matching charset.

Example 4 — Inspecting Byte Values

In UTF-8, "Hi" becomes bytes 72 and 105 (ASCII codes for H and i).

java
import java.nio.charset.StandardCharsets;
import java.util.Arrays;

public class ByteValuesDemo {
    public static void main(String[] args) {
        byte[] bytes = "Hi".getBytes(StandardCharsets.UTF_8);

        System.out.println(Arrays.toString(bytes));
    }
}

How It Works

A byte stores values from -128 to 127. When printed in an array, 72 and 105 are the UTF-8 encoding of uppercase H and lowercase i.

Example 5 — String Length vs Byte Length

Some characters use multiple bytes in UTF-8, so bytes.length can exceed text.length().

java
import java.nio.charset.StandardCharsets;

public class LengthCompare {
    public static void main(String[] args) {
        String emoji = "Hi \uD83D\uDE0A"; // Hi + smile emoji

        byte[] bytes = emoji.getBytes(StandardCharsets.UTF_8);

        System.out.println("Chars: " + emoji.length());
        System.out.println("Bytes: " + bytes.length);
    }
}

How It Works

The emoji is stored as a surrogate pair in Java (two char units), and UTF-8 encodes it as four bytes plus one byte each for H, i, and the space.

🚀 Common Use Cases

  • File I/O — write text files as bytes with a known encoding.
  • Network protocols — send HTTP bodies, JSON, or custom message payloads.
  • Cryptography — hash or encrypt the byte form of a string.
  • Database and APIs — prepare binary blobs from string data.
  • Interoperability — exchange data with systems that only understand bytes.

🧠 How getBytes() Works

1

You choose a charset

Default platform charset, UTF-8, or another encoding.

Input
2

Characters are encoded

Each character maps to one or more bytes per charset rules.

Encode
3

byte[] is allocated

A new array holds the encoded bytes; the original String is unchanged.

Output
=

Binary data ready

Use bytes for I/O, hashing, or decoding with new String(bytes, charset).

📝 Notes

  • getBytes() is an instance method—call it on a String variable.
  • Always decode with the same charset you used to encode, or text may become garbled.
  • Prefer StandardCharsets.UTF_8 over bare getBytes() in portable applications.
  • bytes.length is not the same as string.length() for emoji and many non-English characters.
  • getBytes(String charsetName) requires handling UnsupportedEncodingException; the Charset overload avoids that for standard charsets.

⚡ Optimization

getBytes() allocates a new array each call. In hot loops, reuse buffers only when you control the full encode/decode pipeline; for most code, clarity matters more. Pick one charset (usually UTF-8) and use it consistently rather than mixing encodings across modules.

Conclusion

The getBytes() method connects Java strings to the binary world. Choosing the right charset—especially UTF-8—keeps your data correct across systems and platforms.

Remember the round-trip pattern with new String(bytes, charset), and that byte count can differ from character count. With those ideas clear, encoding text for I/O and networking becomes straightforward.

💡 Best Practices

✅ Do

  • Use getBytes(StandardCharsets.UTF_8) for portable encoding
  • Decode with the same charset you used to encode
  • Prefer the Charset overload over string charset names
  • Compare byte arrays with Arrays.equals when needed
  • Document the charset when storing or transmitting encoded bytes

❌ Don’t

  • Rely on getBytes() without arguments in cross-platform apps
  • Assume bytes.length == text.length() always holds
  • Decode UTF-8 bytes with a different charset
  • Confuse byte[] with char[] (use toCharArray() for chars)
  • Ignore charset when sharing data between services

Key Takeaways

Knowledge Unlocked

Five things to remember about getBytes()

Use these points whenever you convert strings to binary data.

5
Core concepts
🌐 02

UTF-8

Portable charset.

Best practice
🔄 03

Round trip

new String(bytes).

Pattern
📏 04

Byte length

May exceed chars.

Edge case
🔌 05

I/O ready

Files, network.

Use case

❓ Frequently Asked Questions

getBytes() encodes the calling String into a byte array using a character set (charset). Each character is converted to one or more bytes according to the encoding rules.
The no-argument getBytes() uses the platform default charset, which depends on the operating system and JVM settings. For portable code, prefer getBytes(StandardCharsets.UTF_8) instead.
UTF-8 is widely supported, works across networks and files, and handles international text. Explicit UTF-8 avoids surprises when your program runs on different machines.
getBytes() picks the platform default encoding. getBytes(Charset) or getBytes(String charsetName) lets you choose UTF-8, ISO-8859-1, or another charset explicitly.
getBytes(String charsetName) throws UnsupportedEncodingException if the charset name is invalid. getBytes(Charset) and the no-arg form do not throw checked exceptions for normal use.
Use it before writing strings to files or sockets, computing hashes, sending HTTP payloads, or any task that needs raw bytes instead of Java String characters.

Encode Text for Files and Networks

Pair getBytes() with format() and copyValueOf() to compose, convert, and transmit text in your Java programs.

Review format() →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

6 people found this page helpful