mirror of
https://github.com/wahyd4/pinpoint.git
synced 2026-08-17 08:46:22 +10:00
[강운덕] [WEB-49] buffer에 추가적인 prefixed 기반 byte[], string 처리 api를 추가함.
git-svn-id: http://svn.bds.nhncorp.com/pe/hippo-commons/trunk@3372 84d0f5b1-2673-498c-a247-62c4ff18d310
This commit is contained in:
@@ -55,7 +55,7 @@ public class AutomaticBuffer extends FixedBuffer {
|
||||
public void putPrefixedBytes(final byte[] bytes) {
|
||||
if (bytes == null) {
|
||||
checkExpend(1);
|
||||
super.putSVar(-1);
|
||||
super.putSVar(NULL);
|
||||
} else {
|
||||
checkExpend(bytes.length + BytesUtils.VINT_MAX_SIZE);
|
||||
super.putSVar(bytes.length);
|
||||
@@ -63,6 +63,33 @@ public class AutomaticBuffer extends FixedBuffer {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put2PrefixedBytes(final byte[] bytes) {
|
||||
if (bytes == null) {
|
||||
checkExpend(BytesUtils.SHORT_BYTE_LENGTH);
|
||||
super.put((short)NULL);
|
||||
} else {
|
||||
if (bytes.length > Short.MAX_VALUE) {
|
||||
throw new IllegalArgumentException("too large bytes length:" + bytes.length);
|
||||
}
|
||||
checkExpend(bytes.length + BytesUtils.SHORT_BYTE_LENGTH);
|
||||
super.put((short)bytes.length);
|
||||
super.put(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put4PrefixedBytes(final byte[] bytes) {
|
||||
if (bytes == null) {
|
||||
checkExpend(BytesUtils.INT_BYTE_LENGTH);
|
||||
super.put(NULL);
|
||||
} else {
|
||||
checkExpend(bytes.length + BytesUtils.INT_BYTE_LENGTH);
|
||||
super.put(bytes.length);
|
||||
super.put(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void putPrefixedString(final String string) {
|
||||
|
||||
@@ -14,8 +14,16 @@ public interface Buffer {
|
||||
|
||||
void putPrefixedBytes(byte[] bytes);
|
||||
|
||||
void put2PrefixedBytes(byte[] bytes);
|
||||
|
||||
void put4PrefixedBytes(byte[] bytes);
|
||||
|
||||
void putPrefixedString(String string);
|
||||
|
||||
void put2PrefixedString(String string);
|
||||
|
||||
void put4PrefixedString(String string);
|
||||
|
||||
void put(byte v);
|
||||
|
||||
void put(boolean v);
|
||||
@@ -88,8 +96,14 @@ public interface Buffer {
|
||||
|
||||
byte[] readPrefixedBytes();
|
||||
|
||||
byte[] read2PrefixedBytes();
|
||||
|
||||
byte[] read4PrefixedBytes();
|
||||
|
||||
String readPrefixedString();
|
||||
|
||||
String read2PrefixedString();
|
||||
|
||||
String read4PrefixedString();
|
||||
|
||||
byte[] getBuffer();
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.io.UnsupportedEncodingException;
|
||||
*/
|
||||
public class FixedBuffer implements Buffer {
|
||||
|
||||
protected static final int NULL = -1;
|
||||
protected byte[] buffer;
|
||||
protected int offset;
|
||||
|
||||
@@ -34,21 +35,67 @@ public class FixedBuffer implements Buffer {
|
||||
|
||||
|
||||
@Override
|
||||
public void putPrefixedBytes(final byte[] bytes) {
|
||||
public void putPrefixedBytes(final byte[] bytes) {
|
||||
if (bytes == null) {
|
||||
putSVar(-1);
|
||||
putSVar(NULL);
|
||||
} else {
|
||||
putSVar(bytes.length);
|
||||
put(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put2PrefixedBytes(final byte[] bytes) {
|
||||
if (bytes == null) {
|
||||
put((short)NULL);
|
||||
} else {
|
||||
if (bytes.length > Short.MAX_VALUE) {
|
||||
throw new IllegalArgumentException("too large bytes length:" + bytes.length);
|
||||
}
|
||||
put((short)bytes.length);
|
||||
put(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put4PrefixedBytes(final byte[] bytes) {
|
||||
if (bytes == null) {
|
||||
put(NULL);
|
||||
} else {
|
||||
put(bytes.length);
|
||||
put(bytes);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void putPrefixedString(final String string) {
|
||||
final byte[] bytes = BytesUtils.toBytes(string);
|
||||
putPrefixedBytes(bytes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put2PrefixedString(final String string) {
|
||||
final byte[] bytes = BytesUtils.toBytes(string);
|
||||
if (string == null) {
|
||||
put((short)NULL);
|
||||
return;
|
||||
}
|
||||
if (bytes.length > Short.MAX_VALUE) {
|
||||
throw new IllegalArgumentException("too large String size:" + bytes.length);
|
||||
}
|
||||
put2PrefixedBytes(bytes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put4PrefixedString(final String string) {
|
||||
final byte[] bytes = BytesUtils.toBytes(string);
|
||||
if (string == null) {
|
||||
put(NULL);
|
||||
return;
|
||||
}
|
||||
put4PrefixedBytes(bytes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void put(final byte v) {
|
||||
this.buffer[offset++] = v;
|
||||
@@ -221,7 +268,31 @@ public class FixedBuffer implements Buffer {
|
||||
@Override
|
||||
public byte[] readPrefixedBytes() {
|
||||
final int size = readSVarInt();
|
||||
if (size == -1) {
|
||||
if (size == NULL) {
|
||||
return null;
|
||||
}
|
||||
if (size == 0) {
|
||||
return EMPTY;
|
||||
}
|
||||
return readBytes(size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] read2PrefixedBytes() {
|
||||
final int size = readShort();
|
||||
if (size == NULL) {
|
||||
return null;
|
||||
}
|
||||
if (size == 0) {
|
||||
return EMPTY;
|
||||
}
|
||||
return readBytes(size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public byte[] read4PrefixedBytes() {
|
||||
final int size = readInt();
|
||||
if (size == NULL) {
|
||||
return null;
|
||||
}
|
||||
if (size == 0) {
|
||||
@@ -241,7 +312,19 @@ public class FixedBuffer implements Buffer {
|
||||
@Override
|
||||
public String readPrefixedString() {
|
||||
final int size = readSVarInt();
|
||||
if (size == -1) {
|
||||
if (size == NULL) {
|
||||
return null;
|
||||
}
|
||||
if (size == 0) {
|
||||
return "";
|
||||
}
|
||||
return readString(size);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String read2PrefixedString() {
|
||||
final int size = readShort();
|
||||
if (size == NULL) {
|
||||
return null;
|
||||
}
|
||||
if (size == 0) {
|
||||
@@ -253,7 +336,7 @@ public class FixedBuffer implements Buffer {
|
||||
@Override
|
||||
public String read4PrefixedString() {
|
||||
final int size = readInt();
|
||||
if (size == -1) {
|
||||
if (size == NULL) {
|
||||
return null;
|
||||
}
|
||||
if (size == 0) {
|
||||
|
||||
@@ -112,12 +112,16 @@ public class ApplicationMapStatisticsUtils {
|
||||
return BytesUtils.concat(applicationnameBytesLength, applicationnameBytes, applicationtypeBytes, slot);
|
||||
}
|
||||
|
||||
public static String getApplicationNameFromRowKey(byte[] bytes) {
|
||||
public static String getApplicationNameFromRowKey(byte[] bytes, int offset) {
|
||||
if (bytes == null) {
|
||||
throw new NullPointerException("bytes must not be null");
|
||||
}
|
||||
short applicationNameLength = BytesUtils.bytesToShort(bytes, 0);
|
||||
return BytesUtils.toString(bytes, 2, applicationNameLength); //.trim();
|
||||
short applicationNameLength = BytesUtils.bytesToShort(bytes, offset);
|
||||
return BytesUtils.toString(bytes, offset + 2, applicationNameLength); //.trim();
|
||||
}
|
||||
|
||||
public static String getApplicationNameFromRowKey(byte[] bytes) {
|
||||
return getApplicationNameFromRowKey(bytes, 0);
|
||||
}
|
||||
|
||||
public static short getApplicationTypeFromRowKey(byte[] bytes) {
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
package com.nhn.pinpoint.common.buffer;
|
||||
|
||||
import com.nhn.pinpoint.common.util.BytesUtils;
|
||||
import junit.framework.Assert;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -23,6 +24,55 @@ public class AutomaticBufferTest {
|
||||
Assert.assertEquals(1, BytesUtils.bytesToInt(buf, 0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPut2PrefixedBytes() throws Exception {
|
||||
byte[] bytes1 = new byte[2];
|
||||
checkPut2PrefixedBytes(bytes1);
|
||||
|
||||
byte[] bytes2 = new byte[0];
|
||||
checkPut2PrefixedBytes(bytes2);
|
||||
|
||||
byte[] bytes3 = new byte[Short.MAX_VALUE];
|
||||
checkPut2PrefixedBytes(bytes3);
|
||||
|
||||
checkPut2PrefixedBytes(null);
|
||||
|
||||
try {
|
||||
byte[] bytes4 = new byte[Short.MAX_VALUE+1];
|
||||
checkPut2PrefixedBytes(bytes4);
|
||||
Assert.fail("too large bytes");
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
private void checkPut2PrefixedBytes(byte[] bytes) {
|
||||
Buffer buffer = new AutomaticBuffer(0);
|
||||
buffer.put2PrefixedBytes(bytes);
|
||||
|
||||
Buffer copy = new FixedBuffer(buffer.getBuffer());
|
||||
Assert.assertArrayEquals(bytes, copy.read2PrefixedBytes());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPut4PrefixedBytes() throws Exception {
|
||||
byte[] bytes1 = new byte[2];
|
||||
checkPut4PrefixedBytes(bytes1);
|
||||
|
||||
byte[] bytes2 = new byte[0];
|
||||
checkPut4PrefixedBytes(bytes2);
|
||||
|
||||
checkPut4PrefixedBytes(null);
|
||||
|
||||
}
|
||||
|
||||
private void checkPut4PrefixedBytes(byte[] bytes) {
|
||||
Buffer buffer = new AutomaticBuffer(0);
|
||||
buffer.put4PrefixedBytes(bytes);
|
||||
|
||||
Buffer copy = new FixedBuffer(buffer.getBuffer());
|
||||
Assert.assertArrayEquals(bytes, copy.read4PrefixedBytes());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPutPrefixedBytesCheckRange() throws Exception {
|
||||
Buffer buffer = new AutomaticBuffer(1);
|
||||
@@ -40,7 +90,7 @@ public class AutomaticBufferTest {
|
||||
|
||||
long l = System.currentTimeMillis();
|
||||
buffer.putSVar(l);
|
||||
logger.info("currentTime size:{}", buffer.getOffset());
|
||||
logger.trace("currentTime size:{}", buffer.getOffset());
|
||||
buffer.setOffset(0);
|
||||
Assert.assertEquals(buffer.readSVarLong(), l);
|
||||
|
||||
@@ -126,6 +176,7 @@ public class AutomaticBufferTest {
|
||||
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testUdp() throws Exception {
|
||||
// Signature:Header{signature=85, version=100, type=28704}
|
||||
|
||||
@@ -1,25 +1,39 @@
|
||||
package com.nhn.pinpoint.common.buffer;
|
||||
|
||||
import com.nhn.pinpoint.common.util.BytesUtils;
|
||||
import junit.framework.Assert;
|
||||
import org.apache.hadoop.hbase.util.Bytes;
|
||||
import org.junit.Test;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Random;
|
||||
|
||||
/**
|
||||
* @author emeroad
|
||||
*/
|
||||
public class FixedBufferTest {
|
||||
private Logger logger = LoggerFactory.getLogger(this.getClass());
|
||||
|
||||
private Random random = new Random();
|
||||
|
||||
@Test
|
||||
public void testPutPrefixedBytes() throws Exception {
|
||||
String test = "test";
|
||||
int expected = 3333;
|
||||
int endExpected = 3333;
|
||||
testPutPrefixedBytes(test, endExpected);
|
||||
testPutPrefixedBytes(null, endExpected);
|
||||
testPutPrefixedBytes("", endExpected);
|
||||
}
|
||||
|
||||
private void testPutPrefixedBytes(String test, int expected) throws UnsupportedEncodingException {
|
||||
Buffer buffer = new FixedBuffer(1024);
|
||||
buffer.putPrefixedBytes(test.getBytes("UTF-8"));
|
||||
if (test != null) {
|
||||
buffer.putPrefixedBytes(test.getBytes("UTF-8"));
|
||||
} else {
|
||||
buffer.putPrefixedString(null);
|
||||
}
|
||||
|
||||
buffer.put(expected);
|
||||
byte[] buffer1 = buffer.getBuffer();
|
||||
@@ -30,8 +44,80 @@ public class FixedBufferTest {
|
||||
|
||||
int i = actual.readInt();
|
||||
Assert.assertEquals(expected, i);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPut2PrefixedBytes() throws Exception {
|
||||
String test = "test";
|
||||
int endExpected = 3333;
|
||||
|
||||
checkPut2PrefixedBytes(test, endExpected);
|
||||
checkPut2PrefixedBytes(null, endExpected);
|
||||
checkPut2PrefixedBytes("", endExpected);
|
||||
|
||||
byte[] bytes = new byte[Short.MAX_VALUE];
|
||||
checkPut2PrefixedBytes(BytesUtils.toString(bytes), endExpected, Short.MAX_VALUE * 2);
|
||||
|
||||
try {
|
||||
byte[] bytes2 = new byte[Short.MAX_VALUE + 1];
|
||||
checkPut2PrefixedBytes(BytesUtils.toString(bytes2), endExpected, Short.MAX_VALUE * 2);
|
||||
Assert.fail("too large bytes");
|
||||
} catch (Exception e) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void checkPut2PrefixedBytes(String test, int expected) throws UnsupportedEncodingException {
|
||||
checkPut2PrefixedBytes(test, expected, 1024);
|
||||
}
|
||||
|
||||
private void checkPut2PrefixedBytes(String test, int expected, int bufferSize) throws UnsupportedEncodingException {
|
||||
Buffer buffer = new FixedBuffer(bufferSize);
|
||||
if (test != null) {
|
||||
buffer.put2PrefixedBytes(test.getBytes("UTF-8"));
|
||||
} else {
|
||||
buffer.put2PrefixedBytes(null);
|
||||
}
|
||||
|
||||
buffer.put(expected);
|
||||
byte[] buffer1 = buffer.getBuffer();
|
||||
|
||||
Buffer actual = new FixedBuffer(buffer1);
|
||||
String s = actual.read2PrefixedString();
|
||||
Assert.assertEquals(test, s);
|
||||
|
||||
int i = actual.readInt();
|
||||
Assert.assertEquals(expected, i);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPut4PrefixedBytes() throws Exception {
|
||||
String test = "test";
|
||||
int endExpected = 3333;
|
||||
|
||||
checkPut4PrefixedBytes(test, endExpected);
|
||||
checkPut4PrefixedBytes(null, endExpected);
|
||||
checkPut4PrefixedBytes("", endExpected);
|
||||
|
||||
}
|
||||
|
||||
private void checkPut4PrefixedBytes(String test, int expected) throws UnsupportedEncodingException {
|
||||
Buffer buffer = new FixedBuffer(1024);
|
||||
if (test != null) {
|
||||
buffer.put4PrefixedBytes(test.getBytes("UTF-8"));
|
||||
} else {
|
||||
buffer.put4PrefixedBytes(null);
|
||||
}
|
||||
|
||||
buffer.put(expected);
|
||||
byte[] buffer1 = buffer.getBuffer();
|
||||
|
||||
Buffer actual = new FixedBuffer(buffer1);
|
||||
String s = actual.read4PrefixedString();
|
||||
Assert.assertEquals(test, s);
|
||||
|
||||
int i = actual.readInt();
|
||||
Assert.assertEquals(expected, i);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user