Here you can find the source of readLengthAndString(ReadableByteChannel channel, ByteBuffer buffer)
public static String readLengthAndString(ReadableByteChannel channel, ByteBuffer buffer) throws IOException
//package com.java2s; /**/*from ww w .ja va2 s. c o m*/ * Copyright (c) 2002-2014 "Neo Technology," * Network Engine for Objects in Lund AB [http://neotechnology.com] * * This file is part of Neo4j. * * Neo4j is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ import java.io.IOException; import java.nio.ByteBuffer; import java.nio.channels.ReadableByteChannel; public class Main { public static String readLengthAndString(ReadableByteChannel channel, ByteBuffer buffer) throws IOException { Integer length = readInt(channel, buffer); if (length != null) { char[] chars = new char[length]; chars = readCharArray(channel, buffer, chars); return chars == null ? null : new String(chars); } else return null; } public static Integer readInt(ReadableByteChannel channel, ByteBuffer buffer) throws IOException { return readAndFlip(channel, buffer, 4) ? buffer.getInt() : null; } private static char[] readCharArray(ReadableByteChannel channel, ByteBuffer buffer, char[] charArray) throws IOException { buffer.clear(); int charsLeft = charArray.length; int maxSize = buffer.capacity() / 2; int offset = 0; // offset in chars while (charsLeft > 0) { if (charsLeft > maxSize) { buffer.limit(maxSize * 2); charsLeft -= maxSize; } else { buffer.limit(charsLeft * 2); charsLeft = 0; } if (channel.read(buffer) != buffer.limit()) { return null; } buffer.flip(); int length = buffer.limit() / 2; buffer.asCharBuffer().get(charArray, offset, length); offset += length; buffer.clear(); } return charArray; } public static boolean readAndFlip(ReadableByteChannel channel, ByteBuffer buffer, int bytes) throws IOException { buffer.clear(); buffer.limit(bytes); while (buffer.hasRemaining()) { int read = channel.read(buffer); if (read == -1) { return false; } } buffer.flip(); return true; } }