1. Com o seguinte código:
    
                    package devmedia;
    
                    import java.io.File;
    
                    import java.io.IOException;
    
                    public class Teste {
    
                    /**
    
                    * @param args
    
                    */
    
                    public static void main(String[] args) {
    
                    try {
    
                    new File("file.txt").createNewFile();
    
                    } catch (IOException e) {
    
                    e.printStackTrace();
    
                    }
    
                    }
    
                    }
                    
    O que ocorre?
    1. O coletor de lixo pode entrar em ação para coletar o arquivo.
    2. É criado um arquivo sem uma referência
    3. Não é possível referenciar o arquivo criado
    4. O arquivo não pode ser usado, uma vez que nenhuma referência aponta para ele
    5. É criada uma referência sem arquivo
    6. Essa sintaxe de criação de arquivos não é valida
  2. Dado o seguinte trecho de código:
    
                    Writer wr = new BufferWriter(xxx);
                    
    O que pode ficar no lugar de xxx?
    1. new BufferedWriter(new FileWriter(new File(“arq.txt”)));
    2. new File(“arq.txt”);
    3. new FileWriter(“arq.txt”);
    4. new PrintWriter(new File(“arq.txt”));
    5. new FileReader(“arq.txt”);
  3. Observe:
    
                    package devmedia;
    
                    import java.io.FileInputStream;
    
                    import java.io.FileOutputStream;
    
                    import java.io.ObjectInputStream;
    
                    import java.io.ObjectOutputStream;
    
                    import java.io.Serializable;
    
                    class Automovel {
    
                    String marca="DM";
    
                    }
    
                    class Carro extends Automovel implements Serializable{
    
                    int numPortas = 5;
    
                    }
    
                    public class TesteSerializacao {
    
                    /**
    
                    * @param args
    
                    */
    
                    public static void main(String[] args) {
    
                    Carro c = new Carro();
    
                    c.marca="Java";
    
                    System.out.print(c.marca);
    
                    try{
    
                    FileOutputStream fos = new FileOutputStream("teste.txt");
    
                    ObjectOutputStream os = new ObjectOutputStream(fos);
    
                    os.writeObject(c);
    
                    os.close();
    
                    FileInputStream fis = new FileInputStream("teste.txt");
    
                    ObjectInputStream oi=new ObjectInputStream(fis);
    
                    c = (Carro)oi.readObject();
    
                    oi.close();
    
                    }catch (Exception e) {
    
                    e.printStackTrace();
    
                    }
    
                    System.out.print(c.marca);
    
                    }
    
                    }
                    
    Qual é a saída?
    1. Java Java
    2. DM Java
    3. DM DM
    4. Java DM
    5. O código não compila
  4. Dado:
    
                    package devmedia;
    
                    import java.io.FileInputStream;
    
                    import java.io.FileOutputStream;
    
                    import java.io.ObjectInputStream;
    
                    import java.io.ObjectOutputStream;
    
                    import java.io.Serializable;
    
                    public class SerializacaoMain {
    
                    /**
    
                    * @param args
    
                    */
    
                    public static void main(String[] args) {
    
                    SerialSpecial sp = new SerialSpecial ();
    
                    try{
    
                    ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("meuArquivo.txt"));
    
                    os.writeObject(s);
    
                    os.close();
    
                    System.out.print(++s.z+" ");
    
                    ObjectInputStream is = new ObjectInputStream(new FileInputStream("meuArquivo.txt"));
    
                    SerialSpecial s2 = (SerialSpecial)is.readObject();
    
                    is.close();
    
                    System.out.print(s2.y+" "+s2.z);
    
                    }catch (Exception e) {
    
                    // TODO: handle exception
    
                    }
    
                    }
    
                    }
    
                    class SerialSpecial implements Serializable{
    
                    transient int y = 7;
    
                    int z= 9;
    
                    }
                    
    Quais opções são corretas?
    1. A compilação falha
    2. A saída é: 10 0 10
    3. A saída é: 10 0 9
    4. A saída é: 10 7 9
    5. A saída é: 10 7 10
    6. Para alterar o processo padrão de desserialização, você sobrescreveria o método defaultReadObject(), de Specialserial.
    7. Para alterar o processo padrão de desserialização, você sobrescreveria o método readObject(), de SpecialSerial.
  5. Com o código abaixo:
    
                    package devmedia;
    
                    import java.io.FileInputStream;
    
                    import java.io.FileOutputStream;
    
                    import java.io.ObjectInputStream;
    
                    import java.io.ObjectOutputStream;
    
                    import java.io.Serializable;
    
                    class Funcionario{
    
                    String nome;
    
                    int idade;
    
                    Funcionario (){
    
                    nome = "Paulo";
    
                    idade = 33;
    
                    }
    
                    public String toString(){
    
                    return nome+ " "+idade+" ";
    
                    }
    
                    }
    
                    class Gerente extends Funcionario implements Serializable{
    
                    int departamento;
    
                    Gerente(){
    
                    departamento = 11;
    
                    }
    
                    public String toString(){
    
                    return super.toString()+departamento;
    
                    }
    
                    }
    
                    public class Principal {
    
                    /**
    
                    * @param args
    
                    */
    
                    public static void main(String[] args) {
    
                    Gerente g = new Gerente();
    
                    g.departamento = 21;
    
                    g.nome="Pedro";
    
                    g.idade=45;
    
                    try{
    
                    FileOutputStream fos=new FileOutputStream("teste1.ser");
    
                    ObjectOutputStream oos = new ObjectOutputStream(fos);
    
                    oos.writeObject(g);
    
                    FileInputStream fis = new FileInputStream("teste1.ser");
    
                    ObjectInputStream ois = new ObjectInputStream(fis);
    
                    Gerente x = (Gerente)ois.readObject();
    
                    ois.close();
    
                    System.out.println(x);
    
                    }catch (Exception e) {
    
                    // TODO: handle exception
    
                    }
    
                    }
    
                    }
                    
    Qual é a saída?
    1. Pedro 45 21
    2. Paulo 33 21
    3. null
    4. O código não compila
    5. É lançada uma exceção

GABARITO COMENTADO

  1. Resposta A, B, C e D

    Realmente, é criado um arquivo físico, porém, como não existe referência a ele, não é possível utilizá-lo. Como há o objeto, mas não há referência a ele, o garbage collector pode agir, uma vez que ele já está marcado para coleta de lixo. A sintaxe é válida, entretanto, para manipular o arquivo dentro do programa, é inútil.

  2. Resposta A, C e D

    O construtor BufferedWriter pode receber qualquer Writer, isso quer dizer quwe, qualquer instância de classe que passe no teste é-um para um Writer. Assim:

    • FileWriter é um Writer (opção C)
    • PrintWriter é um Writer (opção D)
    • É notório ressaltar que um PrintWriter pode receber um File em um dos seus construtores.
    • BufferedWriter é um Writer (opção A)
  3. Resposta D

    Primeiro, perceba que existe uma relação hierárquica entre as classes Carro e Automovel. No processo de desserialização, como Carro não tem diretamente o atributo marca, uma vez que ele é herdado, então no final do processo a marca será DM.

  4. Resposta C e G

    Iniciaremos a explicação pelo atributo com modificador transient. Ele não será levado em consideraçãona serialização. O outro atributo é comum. Entretanto, a modificação é feita depois da serialização e não será levada. Lembre-se de que o estado do objeto precisa ser conservado.

    Para modificar o processo padrão de desserialização, você sobrescreveria o método readObject(), de SerialSpecial.

  5. Resposta B

    Existe uma relação de hierarquia entre as classes. No processo de desserialização, o construtor da classe pai é executado. Desse modo, todos os atributos que forem exclusivos da classe pai serão retornados. O que for da classe filho e tiver sido alterado antes da serialização terá o seu estado mantido.

Em breve daremos continuidade nesta série com mais um artigo.


Leia todos artigos da série