Почему мне нужно использовать временное ключевое слово, чтобы избежать java .lang.StackOverflowError с использованием Gson и атрибута SocketChannel? - PullRequest
0 голосов
/ 02 марта 2020

Я использую Gson для обслуживания БД пользователей. Почему мне нужно было использовать переходный процесс для атрибута socketCh, чтобы избежать StackOverflowError?

public class User {
    String username;
    String password;
    ArrayList<String> friends;
    transient SocketChannel socketCh = null;
    ...
}

Когда был выполнен файл fileWriter.write (gson.to Json (usersDB)) ", а socketCh не был временным проблема stackOverflow

static void updateOrCreateDBFile() {
    File file = new File(nameJsonDBFile);
    Gson gson = new Gson();
    try {
        if(file.createNewFile()) {
            usersDB = new HashMap<String, User>();
            System.out.println(name3d + ": Creating the database json file");
        }
        FileWriter fileWriter = new FileWriter(file);
        System.out.println(name3d+": usersDB "+usersDB);
        fileWriter.write(gson.toJson(usersDB));
        fileWriter.close();
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }
}
...