evgeniy8705
@evgeniy8705
Повелитель вселенной

Откуда берутся пустые символы в начале при записи в файл?

Почему при записи в файл в начале появляются невидимые символы которые влияют на вывод результата? Как решить данную проблему?

После выполнения кода в файле будет такая строка: "
df4a17b49c174cd5860de7d20bc55dbe.png

После считывания данных из файла будет такой результат: Person(, 1835012), а должен быть Person(Alex, 28)

import java.io.*;

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person(" + name + ", " + age + ")";
    }
}

interface EntityInput {
    public Person readPerson() throws IOException;
}

interface EntityOutput {
    public void writePerson(Person person) throws IOException;
}

class EntityOutputStream implements EntityOutput {
    private final DataOutput out;

    EntityOutputStream(OutputStream out) {
        this.out = new DataOutputStream(out);
    }

    @Override
    public void writePerson(Person person) throws IOException {
        out.writeInt(person.getAge()); // запись возраста

        if (person.getName() == null) {
            out.writeUTF("defaultName");
        } else {
            out.writeUTF(person.getName()); // запись имени
        }
    }
}

class EntityInputStream implements EntityInput {
    private final DataInput src;

    EntityInputStream(InputStream src) {
        this.src = new DataInputStream(src);
    }

    @Override
    public Person readPerson() throws IOException {
        return new Person(src.readUTF(), src.readInt()); // Создание объекта Person c считанными данными
    }
}

public class App {
    public static void main(String[] args) throws IOException {
        Person person = new Person("Alex", 28);

        EntityOutputStream out = new EntityOutputStream(new FileOutputStream("c://file.txt"));
        EntityInput in = new EntityInputStream(new FileInputStream("c://file.txt"));

        out.writePerson(person); // Запись в файл данных о person

        System.out.println(in.readPerson()); // Считывание данных о person из файла
    }
}
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Символы в начале это непечатные символы, получающих из инта, который вы пишете первым. Неправильно считывается из-за того, что вы в неправильном порядке читаете. Сначала надо читать инт, потом строку.
Ну и писать просто в файл без всякой структуры это не правильно. Почитайте про xml, json. Про бд. Про сериализацию, в конце концов.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы