P2P сеть и сериализация - PullRequest
       8

P2P сеть и сериализация

0 голосов
/ 07 сентября 2018

Приветствие, Я работаю над программой, которая зависит от локальной сети p2p, я создаю новые одноранговые узлы, нажимая кнопку run в IDE, я хочу, чтобы список массивов был разделен между всеми потоками, чтобы я мог изменить его.

проблема, с которой я столкнулся: если первый поток записывает в файл сериализации, вновь созданные потоки могут читать эту модификацию в списке, но если последний поток изменяет список, первые потоки не могут видеть эту модификацию, поскольку они десериализуются файл один раз нажмите на кнопку запуска.

есть ли решение для этого? (Java)

Код:

Peer  peer = Peer.getInstance(portName, portNumber, "localhost", peers);

    new Thread(peer::startHost).start();

    peers.put(peer.getPort(), peer);

    waitASecond();
    serializePeers();
    return peer;

Сериализация:

private static void serializePeers() {
        try {
          FileOutputStream fos = new 
          FileOutputStream("peersList.ser");
          ObjectOutputStream oos = new ObjectOutputStream(fos);
          oos.writeObject(peers);
          oos.close();

        fos.close();
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

Desirialize:

private static void deserializePeers() {

    try {
        FileInputStream fis = new FileInputStream("peersList.ser");
        ObjectInputStream ois = new ObjectInputStream(fis);
        peers = (LinkedHashMap<Integer, Peer>) ois.readObject();
        ois.close();
        fis.close();
    } catch (Exception e) {
        System.out.println("This is the first peer connected to the network");        }
}
...