EOFException

Ta dando java.io.EOFException que pelo que pesquisei é quando passa da quantidade de bytes do arquivo, eu ainda não entendi bem, pois to estudando agr sobre isso

Aqui ta o código:

public final class Testes{
static FileOutputStream arquivoOut;
static FileInputStream arquivoIn;
static DataOutputStream gravar;
static DataInputStream ler;

public static void main(String[] args) throws IOException {
    lerDados();
    lerProximoDado();
}
public static void gravarDados(String dado) throws FileNotFoundException, IOException {
    arquivoOut = new FileOutputStream("C:\\Users\\berna\\Desktop\\Nova pasta\\dados.dat");
    gravar = new DataOutputStream(arquivoOut);
    gravar.writeUTF(dado);
    arquivoOut.close();
}
public static void lerDados() throws FileNotFoundException, IOException {
    arquivoIn = new FileInputStream("C:\\Users\\berna\\Desktop\\Nova pasta\\dados.dat");
    ler = new DataInputStream(arquivoIn);
    System.out.println(ler.readUTF());
    arquivoIn.close();
}
public static void lerProximoDado() throws FileNotFoundException, IOException {
    arquivoIn = new FileInputStream("C:\\Users\\berna\\Desktop\\Nova pasta\\dados.dat");
    ler = new DataInputStream(arquivoIn);
    System.out.println(ler.read());
    while(ler.read() != -1) {
        System.out.println(ler.readUTF());
    }
}

}

O arquivo já existe, eu havia criado antes, então comecei a fazer alguns testes pra entender melhor sobre o assunto.

O erro ta dando na seguinte linha dentro do while :

    System.out.println(ler.readUTF());

É que você já está lendo o arquivo antes e durante o condicional do laço, eventualmente é lido o último byte no condicional e aí vai lançar exceção no readUTF().

Troque este código:

System.out.println(ler.read());
while(ler.read() != -1) {
    System.out.println(ler.readUTF());
}

Por este:

String texto = null;
while ( (texto = ler.readUTF()) != null ) {
    System.out.println(texto);
}

Eu não entendi muito bem, para que serve o read() então?

O read() serve para você ler um único byte.

https://docs.oracle.com/javase/10/docs/api/java/io/InputStream.html#read()