Problemas ao serializar lista Java

Ola,

Estou criando um programa, apenas com o proposito de estudo, onde um usuario digita uma mesagem e a ela e atribuido um id (igual ao tamanho do arraylist onde as mensagens serao gravadas), e uma senha que e escolhida aleatoriamente, e ambos serao usados mais tarde quando o usuario quiser vizualizar a mensagem. Tudo esta funcionando perfeitamente, exceto a serializacao, que quando e requisitada a recuperacao dos dados da classe onde o arraylist esta contido, parece que me retorna um arraylist vazio ou nao esta funcionando mesmo.

aqui esta o codigo

Classe onde se encotra arraylist que gostaria de serializar

package encriptadorMsg;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class GerenciadorMensagem implements Serializable{
    
    
    

    private static final long serialVersionUID = 1859004047392459794L;

    String[] possibilidades = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9"};
    List <Mensagem> mensagens = new ArrayList<Mensagem>();
    
    
    public void criaNovaMensagem(String mensagem){
            int id = mensagens.size();
            Mensagem msg = new Mensagem(geraSenha(), mensagem, id);
            mensagens.add(msg);        
 }
    

    public String[] geraSenha(){
        Random rand = new Random();
        String p0 = possibilidades[rand.nextInt((61 - 0 )+1)-0];
        String p1 = possibilidades[rand.nextInt((61 - 0 )+1)-0];
        String p2 = possibilidades[rand.nextInt((61 - 0 )+1)-0];
        String p3 = possibilidades[rand.nextInt((61 - 0 )+1)-0];
        String p4 = possibilidades[rand.nextInt((61 - 0 )+1)-0];
        String p5 = possibilidades[rand.nextInt((61 - 0 )+1)-0];
        
        String[] novaSenha = {p0,p1,p2,p3,p4,p5};
        
        return novaSenha;
    }
    
    
    public boolean comparaSenha(String senhaUsuario, int idUsuario){
        String[] senhaUsuarioQuebrada = senhaUsuario.split("(?!^)");
        for (Mensagem mensagem : mensagens) {
                if(mensagens.get(idUsuario).getId() == idUsuario && Arrays.equals(senhaUsuarioQuebrada, mensagens.get(idUsuario).getSenha())){
                return true;
            }
            else{
                return false;
            }
        }
        return false;
    }
    
    public String mostraMensagem(String senha, int id){
        if(comparaSenha(senha, id) == true){
            for (Mensagem mensagem : mensagens) {
                if(mensagem.getId() == id){
                    String mensagemFinal = mensagem.getMensagem();
                    return mensagemFinal;
                }
    
            }
        }
        
        return "Senha ou Id invalidos";
        }
    

}



 package encriptadorMsg;

 import java.io.Serializable;

 public class Mensagem implements Serializable{

        /**
         * 
         */
    private static final long serialVersionUID = -1113753825069557271L;
    private String[] senha;
    private String mensagem;
    private int id;
    
    public Mensagem(String[] senha, String mensagem, int id) {
        if (mensagem.equalsIgnoreCase(null)){
            throw new IllegalArgumentException("A mensagem nao pode ser nula");
        }
        this.senha = senha;
        this.mensagem = mensagem;
        this.id = id;
    }

    public String[] getSenha() {
        return senha;
    }

    public void setSenha(String[] senha) {
        this.senha = senha;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
    
    
    
    package encriptadorMsg;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;

public class Serializador {

    public void salvaGerenciador(GerenciadorMensagem gmsg){
        
         gmsg = new GerenciadorMensagem();
        try{
            FileOutputStream arquivoGrav = new FileOutputStream("/root/Documentos/gerenciadorSalvo.dat");

            ObjectOutputStream objGravar = new ObjectOutputStream(arquivoGrav);
            
            objGravar.writeObject(gmsg);
            
            objGravar.flush();
            
            objGravar.close();
            
            arquivoGrav.flush();
            
            arquivoGrav.close();
        }
        catch(Exception e){
            e.printStackTrace();
        }
    }
    
    @SuppressWarnings("finally")
    public GerenciadorMensagem carregaGerenciador(){
        GerenciadorMensagem gerenciador = new GerenciadorMensagem();
        try
        {
            FileInputStream arquivoLeitura = new FileInputStream("/root/Documentos/gerenciadorSalvo.dat");
            
            ObjectInputStream objLeArquivo = new ObjectInputStream(arquivoLeitura);
            
            gerenciador = (GerenciadorMensagem)objLeArquivo.readObject();
            
            objLeArquivo.close();
        }
        catch(Exception e) 
        {
            e.printStackTrace();
        }
        finally{
            return gerenciador;
        }
    }



}



}


package encriptadorMsg;


import java.util.Arrays;
import java.util.Scanner;

public class Teste {

    public static void main(String[] args) {
        Scanner ler = new Scanner(System.in);
        GerenciadorMensagem gmsg = new GerenciadorMensagem();
        Serializador serial = new Serializador();


        int opcao = 0;
        do {
            
            System.out.println("\n\n          ### Encriptador de Mensagens ###");
            System.out.println("\n               =========================");
            System.out.println("\n               |   1 - Encriptar Msg  |");
            System.out.println("\n               |   2 - Ler mensagem   |");
            System.out.println("\n               |   0 - Sair           |");
            System.out.println("\n               =========================");
            System.out.println("Opcao --> ");
            opcao = Integer.parseInt(ler.nextLine());
            switch (opcao){
            case 1:
                System.out.println("\nDigite o texto a ser encriptado");
                System.out.println("\n-->");
                String texto = ler.nextLine();
                int mostraIdUsuario = gmsg.mensagens.size();
                gmsg.criaNovaMensagem(texto);
                String mostraSenhaUsuario = gmsg.mensagens.get(mostraIdUsuario).getSenha()[0] + gmsg.mensagens.get(mostraIdUsuario).getSenha()[1] + gmsg.mensagens.get(mostraIdUsuario).getSenha()[2] + gmsg.mensagens.get(mostraIdUsuario).getSenha()[3] + gmsg.mensagens.get(mostraIdUsuario).getSenha()[4] + gmsg.mensagens.get(mostraIdUsuario).getSenha()[5];
                System.out.println("\nSua senha e:");
                System.out.println(mostraSenhaUsuario);
                System.out.println("\n\nSeu id e: ");
                System.out.println(mostraIdUsuario);
                break;
            case 2: 
                System.out.println("\nDigite o id da mensagem a ser vizualizada");
                System.out.println("\n-->");
                int id = Integer.parseInt(ler.nextLine());
                System.out.println("\nDigite a senha da Mensagem ");
                System.out.println("\n-->");
                String senha = ler.nextLine();
                gmsg.comparaSenha(senha, id);
                System.out.println("\nSua mensagem:");
                System.out.println(gmsg.mostraMensagem(senha, id));                break;
            case 3:
                serial.salvaGerenciador(gmsg);
                break;
            case 4:
                serial.carregaGerenciador();
            case 0:
                break;
            default:
                System.out.println("Opcao Invalida!");
                break;
            }
        }while(opcao != 0);

    }
}

Obrigado pela atencao