5. 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?

a) O coletor de lixo pode entrar em ação para coletar o arquivo.

b)É criado um arquivo sem uma referência

c)Não é possível referenciar o arquivo criado

d)O arquivo não pode ser usado, uma vez que nenhuma referência aponta para ele

e) É criada uma referência sem arquivo

f)Essa sintaxe de criação de arquivos não é valida

 

6. Dado o seguinte trecho de código:

Writer wr = new BufferWriter(xxx);

O que pode ficar no lugar de xxx?

a) new BufferedWriter(new FileWriter(new File(“arq.txt”)));

b) new File(“arq.txt”);

c) new FileWriter(“arq.txt”);

d) new PrintWriter(new File(“arq.txt”));

e) new FileReader(“arq.txt”);

 

7. 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?

a)Java Java

b)DM Java

c)DM DM

d)Java DM

e)O código não compila

 

8. 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?

a)A compilação falha

b) A saída é: 10 0 10

c) A saída é: 10 0 9

d) A saída é: 10 7 9

e) A saída é: 10 7 10

f) Para alterar o processo padrão de desserialização, você sobrescreveria o método defaultReadObject(), de Specialserial.

g) Para alterar o processo padrão de desserialização, você sobrescreveria o método readObject(), de SpecialSerial.

 

9. 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?

a)Pedro 45 21

b) Paulo 33 21

c) null

d)O código não compila

e)É lançada uma exceção

GABARITO COMENTADO

5. 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.

 

6. 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)

 

7. 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.

 

8. 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.

 

9. 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