Java ByteBuffer Print printBuffer(String msg, ByteBuffer buffer)

Here you can find the source of printBuffer(String msg, ByteBuffer buffer)

Description

Print the contents of the buffer out to the PrintStream in hex and ASCII.

License

Open Source License

Parameter

Parameter Description
msg The message to use as the header for this display
buffer The ByteBuffer containing the data. The contents from 0 to buffer.position() are printed out. Remember to set position!

Declaration

public static String printBuffer(String msg, ByteBuffer buffer) 

Method Source Code

//package com.java2s;
/*//w  w w.ja  v  a  2  s  . co m
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright (c) 2008-2010 Oracle and/or its affiliates. All rights reserved.
 *
 * The contents of this file are subject to the terms of either the GNU
 * General Public License Version 2 only ("GPL") or the Common Development
 * and Distribution License("CDDL") (collectively, the "License").  You
 * may not use this file except in compliance with the License.  You can
 * obtain a copy of the License at
 * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
 * or packager/legal/LICENSE.txt.  See the License for the specific
 * language governing permissions and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file at packager/legal/LICENSE.txt.
 *
 * GPL Classpath Exception:
 * Oracle designates this particular file as subject to the "Classpath"
 * exception as provided by Oracle in the GPL Version 2 section of the License
 * file that accompanied this code.
 *
 * Modifications:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 *
 * Contributor(s):
 * If you wish your version of this file to be governed by only the CDDL or
 * only the GPL Version 2, indicate your decision by adding "[Contributor]
 * elects to include this software in this distribution under the [CDDL or GPL
 * Version 2] license."  If you don't indicate a single choice of license, a
 * recipient has the option to distribute your version of this file under
 * either the CDDL, the GPL Version 2 or to extend the choice of license to
 * its licensees as provided above.  However, if you add GPL Version 2 code
 * and therefore, elected the GPL Version 2 license, then the option applies
 * only if the new code is made subject to such option by the copyright
 * holder.
 */

import java.nio.ByteBuffer;

public class Main {
    /**
     * Print the contents of the buffer out to the PrintStream in
     * hex and ASCII.
     * 
     * Note this was taken from the java corba sources.
     *
     * @param msg    The message to use as the header for this display
     * @param buffer The ByteBuffer containing the data.  The contents
     *               from 0 to buffer.position() are printed out.  Remember to set
     *               position!
     */
    public static String printBuffer(String msg, ByteBuffer buffer) {
        StringBuffer sbuf = new StringBuffer();
        int length = buffer.position();
        sbuf.append("--------------------------------------------------------\n\n");
        sbuf.append(msg).append("\n");
        sbuf.append("\n");
        sbuf.append("Thread  : ").append(Thread.currentThread().getName()).append("\n");
        sbuf.append("Total length (ByteBuffer position) : ").append(length).append("\n");
        sbuf.append("Byte Buffer capacity               : ").append(buffer.capacity()).append("\n\n");

        try {
            char[] charBuf = new char[16];
            for (int i = 0; i < length; i += 16) {
                int j = 0;

                // For every 16 bytes, there is one line of output.  First,
                // the hex output of the 16 bytes with each byte separated
                // by a space.
                while (j < 16 && (i + j) < length) {
                    int k = buffer.get(i + j);
                    if (k < 0)
                        k = 256 + k;
                    String hex = Integer.toHexString(k);
                    if (hex.length() == 1)
                        hex = "0" + hex;
                    sbuf.append(hex).append(" ");
                    j++;
                }

                // Add any extra spaces to align the
                // text column in case we didn't end
                // at 16
                while (j < 16) {
                    sbuf.append("   ");
                    j++;
                }

                // Now output the ASCII equivalents.  Non-ASCII
                // characters are shown as periods.
                int x = 0;
                while (x < 16 && x + i < length) {
                    if (isPrintable((char) buffer.get(i + x)))
                        charBuf[x] = (char) buffer.get(i + x);
                    else
                        charBuf[x] = '.';
                    x++;
                }
                sbuf.append(new String(charBuf, 0, x)).append("\n");
            }
        } catch (Throwable t) {
            t.printStackTrace();
        }

        sbuf.append("--------------------------------------------------------\n");
        return sbuf.toString();
    }

    public static boolean isPrintable(char c) {
        if (Character.isJavaIdentifierStart(c)) {
            // Letters and $ _
            return true;
        }
        if (Character.isDigit(c)) {
            return true;
        }
        switch (Character.getType(c)) {
        case Character.MODIFIER_SYMBOL:
            return true; // ` ^
        case Character.DASH_PUNCTUATION:
            return true; // -
        case Character.MATH_SYMBOL:
            return true; // = ~ + | < >
        case Character.OTHER_PUNCTUATION:
            return true; // !@#%&*;':",./?
        case Character.START_PUNCTUATION:
            return true; // ( [ {
        case Character.END_PUNCTUATION:
            return true; // ) ] }
        }
        return false;
    }
}

Related

  1. print(ByteBuffer bb)
  2. print(ByteBuffer byteBuffer)
  3. printBuffer(ByteBuffer buffer)
  4. printBuffer(ByteBuffer buffer)
  5. printByteBuffer(ByteBuffer buf)
  6. printData(ByteBuffer buf, int offset, int len)
  7. printData(ByteBuffer buffer, int len)
  8. printImageContentsSubset(ByteBuffer buf, int w, int h)