我不太熟悉字节的所有含义甚至接近字符集,只是因为我没有经常使用它们。但是我正在开发一个项目,我需要将每个Java基元类型(和字符串)从字节转换为AND。我希望他们都使用字符集UTF-8,但我不确定我是否正确转换它们。
无论如何,虽然我非常确定所有来自/来自字节转换的数字都是正确的,但是再一次,我需要100%确定。如果某人对使用数字和字符集的字节有很好的经验,你可以查看下面的课程,并指出任何问题吗?
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
public class ByteUtil
{
//TO BYTES FROM PRIMITIVES & STRINGS
public static byte[] getBytes(short i)
{
return ByteBuffer.allocate(2).putInt(i).array();
}
public static byte[] getBytes(int i)
{
return ByteBuffer.allocate(4).putInt(i).array();
}
public static byte[] getBytes(long i)
{
return ByteBuffer.allocate(8).putLong(i).array();
}
public static byte getBytes(boolean i)
{
return (byte) (i ? 1 : 0);
}
public static byte[] getBytes(char i)
{
return getBytes(String.valueOf(i).trim());
}
public static byte[] getBytes(String i)
{
return i.getBytes(StandardCharsets.UTF_8);
}
public static byte[] getBytes(float i)
{
return getBytes(Float.floatToIntBits(i));
}
public static byte[] getBytes(double i)
{
return getBytes(Double.doubleToLongBits(i));
}
//TO PRIMITIVES & STRINGS FROM BYTES
public static short getShort(byte[] b)
{
ByteBuffer wrapped = ByteBuffer.wrap(b);
return wrapped.getShort();
}
public static int getInt(byte[] b)
{
ByteBuffer wrapped = ByteBuffer.wrap(b);
return wrapped.getInt();
}
public static long getLong(byte[] b)
{
ByteBuffer wrapped = ByteBuffer.wrap(b);
return wrapped.getLong();
}
public static boolean getBoolean(byte b)
{
return(b == 1 ? true : false);
}
public static char getChar(byte[] b)
{
return getString(b).trim().toCharArray()[0];
}
public static String getString(byte[] b)
{
return new String(b, StandardCharsets.UTF_8);
}
public static float getFloat(byte[] b)
{
return Float.intBitsToFloat(getInt(b));
}
public static double getDouble(byte[] b)
{
return Double.longBitsToDouble(getLong(b));
}
}
此外,所有输入和返回的数据都是由我的内部源读取的,例如布尔转换可能是也可能不是这样做的正确方法,但在布尔情况下,它不重要因为我知道我要检查的是什么。
答案 0 :(得分:3)
你甚至不需要这样做。您可以使用DataOutputStream将基本类型和字符串写入ByteArrayOutputStream。然后,您可以使用toByteArray()
获取放入ByteArrayInputStream的byte[]
。您可以将InputStream包裹在DataInputStream中以取回原语。
如果您正在完成学校作业,您需要自己实施(这听起来像是一项愚蠢的任务),您可以在{{3}上查找ByteArrayOutputStream和ByteArrayInputStream的实施}。复制/粘贴是一个坏主意,但它可能会给你一些关于要考虑的注意事项的提示。