Buffer

The Buffer class is an abstract class in the java.nio package, serving as the foundation for all buffer classes like ByteBuffer, CharBuffer, IntBuffer, etc. A buffer is a container for a fixed amount of data of a specific primitive type.

Commonly Used Methods

Simple Program using ByteBuffer

This program demonstrates basic usage of a buffer to store and retrieve bytes.

import java.nio.ByteBuffer;

public class SimpleBufferExample {
    public static void main(String[] args) {
        ByteBuffer buffer = ByteBuffer.allocate(10);  // Capacity = 10

        // Writing data to buffer
        for (int i = 0; i < 5; i++) {
            buffer.put((byte) (i + 65)); // storing ASCII A, B, C, D, E
        }

        buffer.flip();  // Switch from write mode to read mode

        // Reading data from buffer
        while (buffer.hasRemaining()) {
            byte b = buffer.get();
            System.out.println("Read: " + (char) b);
        }
    }
}

Problem Statement:

LotusJavaPrince is building a lightweight logging framework. Mahesh suggests using CharBuffer to temporarily store log messages in memory before writing to a file. Write a Java program that stores log messages in a CharBuffer, marks specific positions (for rollback), and rewinds or resets if needed before writing to a file.

import java.io.FileWriter;
import java.io.IOException;
import java.nio.CharBuffer;

public class LogBufferSystem {
    public static void main(String[] args) {
        CharBuffer logBuffer = CharBuffer.allocate(100); // buffer with capacity of 100 chars

        // Step 1: Write initial log messages
        logBuffer.put("INFO: System Started\n");
        logBuffer.put("DEBUG: Initializing modules\n");
        logBuffer.mark();  // Marking this point

        logBuffer.put("ERROR: Temporary glitch detected\n");

        // Step 2: Reset back to mark if error should be ignored
        logBuffer.reset();  // Rollback to marked point

        logBuffer.put("INFO: System Running Smoothly\n");

        // Prepare buffer for reading
        logBuffer.flip();

        // Step 3: Simulate writing to file
        try (FileWriter fw = new FileWriter("logs.txt")) {
            while (logBuffer.hasRemaining()) {
                fw.write(logBuffer.get());
            }
            System.out.println("Logs written to logs.txt successfully.");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Output File (logs.txt):

INFO: System Started
DEBUG: Initializing modules
INFO: System Running SmoothlyCode language: HTTP (http)

The Buffer class in Java NIO is a fundamental building block for handling data in a more efficient and flexible way compared to traditional I/O. It provides a container for a fixed amount of data and supports key properties such as capacity, limit, position, and mark to manage data read/write operations effectively.

As an abstract class, Buffer is extended by specific buffer types like ByteBuffer, CharBuffer, IntBuffer, etc., each designed to work with a particular primitive type. These buffers are essential when working with channels (FileChannel, SocketChannel, etc.), enabling non-blocking, buffered, and high-performance I/O.

Scroll to Top