org.apache.thrift.transport.TMemoryBuffer Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of libthrift Show documentation
Show all versions of libthrift Show documentation
Thrift is a software framework for scalable cross-language services development.
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.thrift.transport;
import org.apache.thrift.TByteArrayOutputStream;
import org.apache.thrift.TConfiguration;
import java.nio.charset.Charset;
/**
* Memory buffer-based implementation of the TTransport interface.
*/
public class TMemoryBuffer extends TEndpointTransport {
/**
* Create a TMemoryBuffer with an initial buffer size of size. The
* internal buffer will grow as necessary to accommodate the size of the data
* being written to it.
*
* @param size the initial size of the buffer
* @throws TTransportException on error initializing the underlying transport.
*/
public TMemoryBuffer(int size) throws TTransportException {
super(new TConfiguration());
arr_ = new TByteArrayOutputStream(size);
updateKnownMessageSize(size);
}
/**
* Create a TMemoryBuffer with an initial buffer size of size. The
* internal buffer will grow as necessary to accommodate the size of the data
* being written to it.
*
* @param config the configuration to use.
* @param size the initial size of the buffer
* @throws TTransportException on error initializing the underlying transport.
*/
public TMemoryBuffer(TConfiguration config, int size) throws TTransportException {
super(config);
arr_ = new TByteArrayOutputStream(size);
updateKnownMessageSize(size);
}
@Override
public boolean isOpen() {
return true;
}
@Override
public void open() {
/* Do nothing */
}
@Override
public void close() {
/* Do nothing */
}
@Override
public int read(byte[] buf, int off, int len) throws TTransportException {
checkReadBytesAvailable(len);
byte[] src = arr_.get();
int amtToRead = (len > arr_.len() - pos_ ? arr_.len() - pos_ : len);
if (amtToRead > 0) {
System.arraycopy(src, pos_, buf, off, amtToRead);
pos_ += amtToRead;
}
return amtToRead;
}
@Override
public void write(byte[] buf, int off, int len) {
arr_.write(buf, off, len);
}
/**
* Output the contents of the memory buffer as a String, using the supplied
* encoding
* @param charset the encoding to use
* @return the contents of the memory buffer as a String
*/
public String toString(Charset charset) {
return arr_.toString(charset);
}
public String inspect() {
StringBuilder buf = new StringBuilder();
byte[] bytes = arr_.toByteArray();
for (int i = 0; i < bytes.length; i++) {
buf.append(pos_ == i ? "==>" : "" ).append(Integer.toHexString(bytes[i] & 0xff)).append(" ");
}
return buf.toString();
}
// The contents of the buffer
private TByteArrayOutputStream arr_;
// Position to read next byte from
private int pos_;
public int length() {
return arr_.size();
}
public byte[] getArray() {
return arr_.get();
}
}