Java examples for java.nio:ByteBuffer Char
get Char Sequence from ByteBuffer
/*//from w ww . j ava 2 s . c om * Copyright (C) 2008-2010 Wayne Meissner * * This file is part of the JNR project. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ //package com.java2s; import java.nio.ByteBuffer; import java.nio.charset.*; public class Main { public static CharSequence getCharSequence(ByteBuffer buf, Charset charset) { final ByteBuffer buffer = buf.slice(); // Find the NUL terminator and limit to that, so the // StringBuffer/StringBuilder does not have superfluous NUL chars int end = indexOf(buffer, (byte) 0); if (end < 0) { end = buffer.limit(); } buffer.position(0).limit(end); return charset.decode(buffer); } public static CharSequence getCharSequence(final ByteBuffer buf, final CharsetDecoder decoder) { final ByteBuffer buffer = buf.slice(); // Find the NUL terminator and limit to that, so the // StringBuffer/StringBuilder does not have superfluous NUL chars int end = indexOf(buffer, (byte) 0); if (end < 0) { end = buffer.limit(); } buffer.position(0).limit(end); try { return decoder.reset() .onMalformedInput(CodingErrorAction.REPLACE) .onUnmappableCharacter(CodingErrorAction.REPLACE) .decode(buffer); } catch (CharacterCodingException ex) { throw new Error("Illegal character data in native string", ex); } } public static ByteBuffer slice(final ByteBuffer buffer, final int position) { final ByteBuffer tmp = buffer.duplicate(); tmp.position(position); return tmp.slice(); } public static ByteBuffer slice(final ByteBuffer buffer, final int position, final int size) { final ByteBuffer tmp = buffer.duplicate(); tmp.position(position).limit(position + size); return tmp.slice(); } public static int indexOf(ByteBuffer buf, byte value) { if (buf.hasArray()) { byte[] array = buf.array(); int begin = buf.arrayOffset() + buf.position(); int end = buf.arrayOffset() + buf.limit(); for (int offset = 0; offset < end && offset > -1; ++offset) { if (array[begin + offset] == value) { return offset; } } } else { int begin = buf.position(); for (int offset = 0; offset < buf.limit(); ++offset) { if (buf.get(begin + offset) == value) { return offset; } } } return -1; } public static int indexOf(ByteBuffer buf, int offset, byte value) { if (buf.hasArray()) { byte[] array = buf.array(); int begin = buf.arrayOffset() + buf.position() + offset; int end = buf.arrayOffset() + buf.limit(); for (int idx = 0; idx < end && idx > -1; ++idx) { if (array[begin + idx] == value) { return idx; } } } else { int begin = buf.position(); for (int idx = 0; idx < buf.limit(); ++idx) { if (buf.get(begin + idx) == value) { return idx; } } } return -1; } }