Java 如何在字节数组中存储多个对象

Java 如何在字节数组中存储多个对象,java,arrays,serialization,Java,Arrays,Serialization,我正在用java编写代码,我遇到了一个问题 我使用的是一个接口(老师给我们的,我们不能改变它),这个接口要求你实现一个功能,输入一个字节数组,通过这个数组你可以传输你想要的任何数据 我需要传递几个大小未知的不同对象,有办法吗?很明显,我可以把每个物体的大小放在开头,但这很难,有没有更简单的方法 我还需要从另一种语言(如c或cpp)以字节数组形式传递数据 因此,该技术必须是非特定于java的 下面是一个简单的代码示例 void myFunc(byte[] arr) { byte[] nam

我正在用java编写代码,我遇到了一个问题 我使用的是一个接口(老师给我们的,我们不能改变它),这个接口要求你实现一个功能,输入一个字节数组,通过这个数组你可以传输你想要的任何数据

我需要传递几个大小未知的不同对象,有办法吗?很明显,我可以把每个物体的大小放在开头,但这很难,有没有更简单的方法

我还需要从另一种语言(如c或cpp)以字节数组形式传递数据 因此,该技术必须是非特定于java的

下面是一个简单的代码示例

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);