eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

Course – LJB – NPI EA (cat = Core Java)
announcement - icon

Code your way through and build up a solid, practical foundation of Java:

>> Learn Java Basics

Partner – LambdaTest – NPI EA (cat= Testing)
announcement - icon

Distributed systems often come with complex challenges such as service-to-service communication, state management, asynchronous messaging, security, and more.

Dapr (Distributed Application Runtime) provides a set of APIs and building blocks to address these challenges, abstracting away infrastructure so we can focus on business logic.

In this tutorial, we'll focus on Dapr's pub/sub API for message brokering. Using its Spring Boot integration, we'll simplify the creation of a loosely coupled, portable, and easily testable pub/sub messaging system:

>> Flexible Pub/Sub Messaging With Spring Boot and Dapr

1. Introduction

IBM created EBCDIC (Extended Binary Coded Decimal Interchange Code) in the 1960s and is still used in IBM mainframe environments. Later, ASCII became the universal standard due to its ease and universality as the modern system standard.

Working with Java and EBCDIC data can be tricky because Java typically uses encodings like ASCII or UTF-8 by default. This incompatibility complicates integration with legacy systems. To make information portable and readable, we need to translate EBCDIC to ASCII.

In this tutorial, we’ll see how Java’s support for native encoding simplifies this conversion.

2. Understanding EBCDIC and ASCII

When we mention character encodings, two names come up frequently: ASCII and EBCDIC. They both do the same thing: they encode characters as bytes. But they’re quite different in structure and use. Learning about them makes us appreciate the importance of conversion in Java and how it allows legacy data to be accessed in newer systems.

Let’s implement a small Java program:

private static final Logger logger = LoggerFactory.getLogger(LogbackRollingExample.class)
public static void main(String[] args) {
        byte[] ebcdicBytes = new byte[] { (byte)0xC1, (byte)0xC2, (byte)0xC3 };

        String text = new String(ebcdicBytes, Charset.forName("Cp037"));
        logger.info(text);
    }

We have ebcdicBytes with raw bytes here and decode them using Charset.forName(“Cp037”), instructing Java to read the bytes as EBCDIC code page 037. Then, with System.out.println(text), we print out the decoded data as a readable string. This easy step just demonstrates the difference between raw EBCDIC bytes that aren’t comprehensible and readable ASCII text once decoded.

3. Step-by-Step Conversion Approach

To reliably make EBCDIC to ASCII conversions in Java, we can divide the process into easy steps. We need to determine the proper EBCDIC code page first. Then, we decode raw bytes into a Java String. We then re-encode the string back to ASCII or UTF-8 for use in new systems. This process ensures precise and transportable data conversion.

Let’s implement the step-by-step conversion approach:

private static final Logger logger = LoggerFactory.getLogger(LogbackRollingExample.class)
public static void main(String[] args) { 
        byte[] ebcdicData = { (byte)0xC8, (byte)0x85, (byte)0x93, (byte)0x93, (byte)0x96 }; 
        String unicodeText = new String(ebcdicData, Charset.forName("Cp037")); 
        byte[] asciiData = unicodeText.getBytes(StandardCharsets.US_ASCII); 
        logger.info(new String(asciiData, StandardCharsets.US_ASCII)); 
    }

Here, the ebcdicData raw bytes hold text in EBCDIC encoding. With Charset.forName(“Cp037”), we decode the bytes to a String that Java internally represents as Unicode. We then call getBytes(StandardCharsets.US_ASCII) to re-encode that string back to ASCII. Finally, System.out.println prints the result, showing how the pipeline of conversions makes legacy data readable on a modern system. This breakdown keeps it simple and avoids loss of data.

4. Practical Java Example

Now that we’ve seen the individual steps, let’s put them together in a complete example. This helps us understand how to read EBCDIC-encoded data from a file, convert it into ASCII, and then display it in a readable format. Java makes this process straightforward by combining FileInputStream, Charset, and StandardCharsets. Let’s implement the Java program to illustrate:

private static final Logger logger = LoggerFactory.getLogger(LogbackRollingExample.class)
public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("input.ebc");
        byte[] ebcdicData = fis.readAllBytes();
        fis.close();
        String unicodeText = new String(ebcdicData, Charset.forName("Cp037"));
        byte[] asciiData = unicodeText.getBytes(StandardCharsets.US_ASCII);
        logger.info(new String(asciiData, StandardCharsets.US_ASCII));
    }

Here, we begin reading all raw bytes from input.ebc through FileInputStream. By using Charset.forName(“Cp037”), we decode EBCDIC bytes to an internal Java String Unicode. Then we call getBytes(StandardCharsets.US_ASCII) to re-encode data back to ASCII. Finally, System.out.println prints out the transformed string, and it’s readable. This whole process illustrates how we can convert from a legacy file to modern text processing in just a few simple steps.

5. Alternative Approaches and Considerations

While the straightforward conversion with Charset is sufficient, for large files we can follow alternative approaches. 

As an example, we can use InputStreamReader and OutputStreamWriter to stream huge files, or CharsetDecoder and CharsetEncoder when fine-grained control over encoding is needed. They give us room for flexibility and serve performance or customization needs.

Now, let’s explore the alternative approaches:

private static final Logger logger = LoggerFactory.getLogger(LogbackRollingExample.class)
public static void main(String[] args) {
        try (
            InputStreamReader reader = new InputStreamReader(
                new FileInputStream("input.ebc"), 
                Charset.forName("Cp037")
            );
            OutputStreamWriter writer = new OutputStreamWriter(
                new FileOutputStream("output.txt"), 
                StandardCharsets.US_ASCII
            )
        ) {
            char[] buffer = new char[1024];
            int length;

            while ((length = reader.read(buffer)) != -1) {
                writer.write(buffer, 0, length);
            }

            logger.info("Conversion complete! See output.txt");

        } catch (IOException e) {
            logger.info("Error during conversion");
        }
    }

Here, we read input.ebc via InputStreamReader and specify Cp037 in order to correctly decode EBCDIC characters. Then we write output via OutputStreamWriter with StandardCharsets.US_ASCII, so the target output file is in ASCII. With a buffer, we stream-read from the EBCDIC source and stream-write to the ASCII target.

This streaming approach is efficient for large files and does not try to load everything into memory while correctly doing the encoding conversion.

6. Conclusion

In this article, we discussed how Java makes it simple to convert between EBCDIC and ASCII, natively supporting several code pages. The key step is selecting the correct variant of EBCDIC (say, Cp037 or Cp1047), byte-decoding into Unicode, and converting back into ASCII or UTF-8.

From quick String conversions to streaming with InputStreamReader and OutputStreamWriter, Java offers multiple techniques for getting legacy data readable and transportable on current systems.

As always, the full code is available over on Github.

Baeldung Pro – NPI EA (cat = Baeldung)
announcement - icon

Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:

>> Explore a clean Baeldung

Once the early-adopter seats are all used, the price will go up and stay at $33/year.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

eBook Jackson – NPI EA – 3 (cat = Jackson)