Ява Буферизированный Поток вывода Ничего не делает! Никакая Ошибка! Никакое сообщение! Что не так?

Я узнаю о Яве из документации Oracle и уроков, и я добрался до этой части (файловый ввод-вывод, потоки, и т.д.), и у меня есть некоторый код здесь, который просто не работает, и я не уверен почему. Я не получаю ошибок или предупреждений, ничего, , DataOutputStream просто не напишет файлу.

Я пытался удалить BufferedOutputStream , и это прокладывает себе путь, таким образом, я предполагаю, что проблема заключается на Буферизированном Потоке, но я не знаю почему.

Возможно, что-то отсутствует. Я действительно застреваю.

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Principal {

    static final String dataFile = "invoicedata.txt";

    static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
    static final int[] units = { 12, 8, 13, 29, 50 };
    static final String[] descs = {
        "Java T-shirt",
        "Java Mug",
        "Duke Juggling Dolls",
        "Java Pin",
        "Java Key Chain"
    };

    public static void main(String[] args) throws IOException {     
        //DECLARATION
        DataOutputStream out = null;
        DataInputStream in = null;

        try {
            out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));
            in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));

            //WRITING???
            for (int i = 0; i < prices.length; i ++) {
                out.writeDouble(prices[i]);
                out.writeInt(units[i]);
                out.writeUTF(descs[i]);
            }

        } catch (Exception e) {
            System.err.println("ERROR!");
            e.printStackTrace();
        }

        double price;
        int unit;
        String desc;
        double total = 0.0;

        //READING
        try {
            while (true) {
                price = in.readDouble();
                unit = in.readInt();
                desc = in.readUTF();
                System.out.format("You ordered %d" + " units of %s at $%.2f%n",
                    unit, desc, price);
                total += unit * price;
            }
        } catch (EOFException e) {
            System.err.println("END OF FILE!");
        }       
    }   
}
4
docs.oracle.com/javase/6/docs/api/java/io/… и/или .close() , возможно?
добавлено автор Anders R. Bystrup, источник
docs.oracle.com/javase/6/docs/api/java/io/… и/или .close() , возможно?
добавлено автор Anders R. Bystrup, источник
вы neeed, чтобы закрыть потоки в конце с методом близко()
добавлено автор SomeJavaGuy, источник

8 ответы

Если вы не закрываете() файл, конец файла может быть усеченным. Если файл достаточно маленький, это может означать, что будет пусто.

При использовании пользовательские объекты вместо множеств, код мог бы быть похожим на это

public static void main(String... ignored) throws IOException {
    List inventories = new ArrayList<>();
    inventories.add(new Inventory("Java T-shirt", 19.99, 12));
    inventories.add(new Inventory("Java Mug", 9.99, 8));

    String dataFile = "invoice-data.dat";
    DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));
    out.writeInt(inventories.size());
    for (Inventory inventory : inventories)
        inventory.write(out);
    out.close();

    DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));
    int count = in.readInt();
    for (int i = 0; i < count; i++) {
        System.out.println(new Inventory(in));
    }
    in.close();
}

static class Inventory {
    final String name;
    final double price;
    int units;

    Inventory(String name, double price, int units) {
        this.name = name;
        this.price = price;
        this.units = units;
    }

    Inventory(DataInput in) throws IOException {
        this.name = in.readUTF();
        this.price = in.readDouble();
        this.units = in.readInt();
    }

    public void write(DataOutput out) throws IOException {
        out.writeUTF(name);
        out.writeDouble(price);
        out.writeInt(units);
    }

    @Override
    public String toString() {
        return "name='" + name + '\'' +
                ", price=" + price +
                ", units=" + units;
    }
}

печати

name='Java T-shirt', price=19.99, units=12
name='Java Mug', price=9.99, units=8
1
добавлено
Я Имею ВНЕ ТЕМЫ Вопрос!, Но Вы, кажется, действительно знаете свою Яву:3
добавлено автор Gabriel Matusevich, источник
Иллинойс испытывает их.. Спасибо За Всю Вашу Помощь!: D
добавлено автор Gabriel Matusevich, источник
Принятие во внимание этого, вы знаете о некотором программном обеспечении, чтобы измерить Уровень или Использование Ресурсов Решения?????
добавлено автор Gabriel Matusevich, источник
Но спасибо за понимание
добавлено автор Gabriel Matusevich, источник
That' s, вероятно, причина, почему они на самом деле не описывают его в документации, это depens также в текущих аппаратных средствах, которые вы используете:)...
добавлено автор Gabriel Matusevich, источник
Прохладный.. плохо запишите его: v
добавлено автор Gabriel Matusevich, источник
Что делает вы считаете БОЛЬШИМ ОБЪЕКТОМ... i' ve, замеченный много примеров, где это говорит: "Этот метод - inneficient, передавая БОЛЬШИЕ ОБЪЕКТЫ"..., но нет никакого примера того, НАСКОЛЬКО Сложный Большой объект, Сколько областей, Переменного Размера... И т.д...., если Вы могли бы поделиться большим количеством знаний со мной.. большой: D
добавлено автор Gabriel Matusevich, источник
потрясающий! это было просто Примером Oraclae:3..., но это было действительно полезно:)
добавлено автор Gabriel Matusevich, источник
OOohh. Право.. completly забыл о закрытии... i' попытка ll это сейчас спасибо
добавлено автор Gabriel Matusevich, источник
@GabrielMatusevich я добавил предложение того, как вы могли сделать его moer объектно-ориентированный, чтобы сделать уборщика основного метода.
добавлено автор Peter Lawrey, источник
Если вы смотрите на мой профиль, можно послать мне по электронной почте вопрос если он doesn' t удовлетворяют этому форуму.
добавлено автор Peter Lawrey, источник
Когда я вижу слова как "большой", "огромное", "быстро" это обычно совершенно субъективный а не небольшим количеством, это может измениться одна тысяча к одному миллиону раз или еще больше. Что я мог бы считать огромным, или быстрый обычно полностью отличается.;) я видел, что плакаты описывают "совершенно значительное" использование памяти, которое равняется нескольким миллионным частям цента памяти.
добавлено автор Peter Lawrey, источник
Я взял интервью в одном месте, где у них была многонациональная система передачи и обработки данных, у которой есть "огромная" и "высокая производительность". Груз, с которым они обращались через тысячи серверов через день, с которым я привык обращаться на одном PC за меньше чем минуту.
добавлено автор Peter Lawrey, источник
Распространенное заблуждение - то, что большая бизнес-задача означает, что у вас есть одинаково большая техническая проблема. например, сервер (серверы), которые являются большими также. Я работал в одной крупной компании с большим количеством сотрудников во многих странах (65K), Они хотели создать каталог LDAP, и я предложил избыточных владельцев с повторением на местные места, и они полагали, что это никогда не могло работать, потому что это должно было быть большим!? Факт база данных LDAP может обращаться с 10 миллионами записей легко, был потерян на них.
добавлено автор Peter Lawrey, источник
Я использую систему инструменты как вершина и iostat и мелодия, используя профилировщика CPU+Memory
добавлено автор Peter Lawrey, источник

Вы забываете звонить близко() на вашем .

    try {
        out = new DataOutputStream(new FileOutputStream(dataFile));
        in = new DataInputStream(new FileInputStream(dataFile));

        //WRITING???
        for (int i = 0; i < prices.length; i ++) {
            out.writeDouble(prices[i]);
            out.writeInt(units[i]);
            out.writeUTF(descs[i]);
        }
        out.close();
    } catch (Exception e) {
        System.err.println("ERROR!");
        e.printStackTrace();
    }

Необходимо также закрыть ваш в .

1
добавлено
LoL.... Такие вот дела... OMG.. я чувствую себя настолько глупым:) я забыл закрываться... теперь, это РАБОТАЕТ!! Спасибо ppl.. так быстрый ответ:)
добавлено автор Gabriel Matusevich, источник

Вы забываете звонить близко() на вашем .

    try {
        out = new DataOutputStream(new FileOutputStream(dataFile));
        in = new DataInputStream(new FileInputStream(dataFile));

        //WRITING???
        for (int i = 0; i < prices.length; i ++) {
            out.writeDouble(prices[i]);
            out.writeInt(units[i]);
            out.writeUTF(descs[i]);
        }
        out.close();
    } catch (Exception e) {
        System.err.println("ERROR!");
        e.printStackTrace();
    }

Необходимо также закрыть ваш в .

1
добавлено
LoL.... Такие вот дела... OMG.. я чувствую себя настолько глупым:) я забыл закрываться... теперь, это РАБОТАЕТ!! Спасибо ppl.. так быстрый ответ:)
добавлено автор Gabriel Matusevich, источник

Необходимо добавить out.close() к коду, чтобы закрыть DataOutputStream после того, как все вещи были написаны файлу.

1
добавлено

Добавьте это до конца части письма:

    out.close();

И это до конца части чтения;

    in.close();
0
добавлено
@GabrielMatusevich Принимают ответ, нажимая на зеленую галочку рядом с моим ответом.
добавлено автор Doorknob, источник
Как я могу отметить эту почту, как РЕШЕНО??? В первый раз отправляя?
добавлено автор Gabriel Matusevich, источник

Добавьте это до конца части письма:

    out.close();

И это до конца части чтения;

    in.close();
0
добавлено
@GabrielMatusevich Принимают ответ, нажимая на зеленую галочку рядом с моим ответом.
добавлено автор Doorknob, источник
Как я могу отметить эту почту, как РЕШЕНО??? В первый раз отправляя?
добавлено автор Gabriel Matusevich, источник

Это может также произойти, который вы хотите написать/прочитанный из закрытого потока. Ява не уведомит вас вообще, никакую ошибку, никакое сообщение, ничто. Так, удостоверьтесь, что вы пишете/прочитанный из открытого потока.

0
добавлено

Когда процесс закончится, неуправляемые средства будут высвобождены. Для InputStreams это прекрасно. Для OutputStreams вы могли потерять буферизированные данные, таким образом, вы должны

поток() или близко ()

поток прежде, чем выйти из программы.

0
добавлено
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async