Java 如何在字节数组中存储多个对象
我正在用java编写代码,我遇到了一个问题 我使用的是一个接口(老师给我们的,我们不能改变它),这个接口要求你实现一个功能,输入一个字节数组,通过这个数组你可以传输你想要的任何数据 我需要传递几个大小未知的不同对象,有办法吗?很明显,我可以把每个物体的大小放在开头,但这很难,有没有更简单的方法 我还需要从另一种语言(如c或cpp)以字节数组形式传递数据 因此,该技术必须是非特定于java的 下面是一个简单的代码示例Java 如何在字节数组中存储多个对象,java,arrays,serialization,Java,Arrays,Serialization,我正在用java编写代码,我遇到了一个问题 我使用的是一个接口(老师给我们的,我们不能改变它),这个接口要求你实现一个功能,输入一个字节数组,通过这个数组你可以传输你想要的任何数据 我需要传递几个大小未知的不同对象,有办法吗?很明显,我可以把每个物体的大小放在开头,但这很难,有没有更简单的方法 我还需要从另一种语言(如c或cpp)以字节数组形式传递数据 因此,该技术必须是非特定于java的 下面是一个简单的代码示例 void myFunc(byte[] arr) { byte[] nam
void myFunc(byte[] arr)
{
byte[] name; // arr[0:10] string in ascii
byte[] lastName; //arr[10:k] string in ascii
byte[] currentUnixTime; //arr[k:arr.lenfth] this is an int
some operations.....
}
因此,如果没有进一步的细节,您可以通过序列化发送
对象
,但这可能并不总是一个好主意。下面是对象
序列化的一个相当通用的实现
interface Sender {
void write(OutputStream outputStream, Object... objects);
List<Object> read(InputStream inputStream);
}
class Homework implements Sender {
@Override
public void write(OutputStream stream, Object... objects) {
for (Object obj : objects) {
try (ObjectOutputStream objStream = new ObjectOutputStream(stream)) {
objStream.writeObject(obj);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public List<Object> read(InputStream stream) {
List<Object> objectList = new ArrayList<>();
try (ObjectInputStream objStream = new ObjectInputStream(stream)) {
Object obj;
while ((obj = objStream.readObject()) != null) {
objectList.add(obj);
}
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
return objectList;
}
}
然后使用它
Homework homework = new Homework();
String helloWorld = "hello world";
byte[] helloBytes = homework.write(helloWorld);
assert homework.read(helloBytes).get(0).equals(helloWorld);
最后我做的是- 我将要发送的每个对象都转换为base 32,然后在每个转换的对象之间添加一个“,”来分隔对象(因为base 32表示不需要“,”。
之后的分析很简单什么样的对象?请注意,并非Java中的所有内容都可以以有意义的方式序列化为字节。能否请您发布一些代码,向我们展示您尝试了什么以及您想要实现什么?问题中的字节数组在哪里?我不明白如何发送和接收数据见更新的响应,我一开始误解了ask。如果从
native
方法返回的数据源返回字节,那么可以将字节传递给该方法并读取对象。然而,这并不包括完全不同的c部分。请看:但是在发送到java之前,如何在cpp中写入这样的数据?
Homework homework = new Homework();
String helloWorld = "hello world";
byte[] helloBytes = homework.write(helloWorld);
assert homework.read(helloBytes).get(0).equals(helloWorld);