Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Очистка Formatter / 16 сообщений из 16, страница 1 из 1
03.03.2017, 10:05
    #39413517
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
есть
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
Formatter fmt = new Formatter();

while (rs.next()) {
    fmt.format("%1$s%2$s%3$s%4$s",.........));
    System.out.println(fmt.toString());
  
    fmt.      -  тут надо очистить fmt для повторного использования
}


это возможно?
...
Рейтинг: 0 / 0
03.03.2017, 10:17
    #39413524
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
Что-то типа такого.
Код: java
1.
2.
3.
4.
StringBuilder sb = new StringBuilder();
Formatter fmt = new Formatter(sb);
...
sb.setLength(0);


Там вообще можно любой удобный Appendable взять, и использовать вывод из него вместо fmt.toString();
Читай исходный код.
...
Рейтинг: 0 / 0
03.03.2017, 10:23
    #39413529
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
javadoc
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
StringBuilder s = new StringBuilder()
Formatter f = new Formatter(s, Locale.US)
f.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
print(s)

s = new StringBuilder()
f.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
print(s)



не?
...
Рейтинг: 0 / 0
03.03.2017, 10:26
    #39413532
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
Blazkowicz, вопрос чисто концептуальный - так как в Java нет явных деструкторов, что произойдет если для очистки просто создать новый объект
Код: java
1.
Formatter fmt = new Formatter(); 


Произойдет утечка памяти или мусорщик поймет, что предыдущий объект больше не используется и утилизирует его?
...
Рейтинг: 0 / 0
03.03.2017, 10:26
    #39413533
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
BlazkowiczЧто-то типа такого.
Код: java
1.
2.
3.
4.
StringBuilder sb = new StringBuilder();
Formatter fmt = new Formatter(sb);
...
sb.setLength(0);



Там вообще можно любой удобный Appendable взять, и использовать вывод из него вместо fmt.toString();
Читай исходный код.
как с StringBuilder работать я знаю.
Formatter по умолчанию использует StringBuilder.
а так это получается огород городить...
...
Рейтинг: 0 / 0
03.03.2017, 10:27
    #39413535
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
SQL2008вопрос чисто концептуальный http://stackoverflow.com/questions/18766780/stringbuilder-reset-or-create-a-new
...
Рейтинг: 0 / 0
03.03.2017, 10:31
    #39413536
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
grasoff.netSQL2008вопрос чисто концептуальный http://stackoverflow.com/questions/18766780/stringbuilder-reset-or-create-a-new
Спасибо, это то, что нужно.
(немного неуютно чуcтвую себя в мире с new, но без delete)
...
Рейтинг: 0 / 0
03.03.2017, 10:31
    #39413537
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
grasoff.net,

везде написано, что Formatter использует буфер
а StringBuilder выделяет память и при достижении границы - увеличивает.
про буфер ничего не говорится про увеличение, просто пишет в него.
есть разница?
...
Рейтинг: 0 / 0
03.03.2017, 10:38
    #39413543
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
вадякак с StringBuilder работать я знаю.
Formatter по умолчанию использует StringBuilder.
а так это получается огород городить...
Зачем тогда спрашивал, мистер всезнайка?
...
Рейтинг: 0 / 0
03.03.2017, 10:40
    #39413546
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
SQL2008так как в Java нет явных деструкторов
А есть неявные?

SQL2008, что произойдет если для очистки просто создать новый объект
Код: java
1.
Formatter fmt = new Formatter(); 


Произойдет утечка памяти или мусорщик поймет, что предыдущий объект больше не используется и утилизирует его?
С какой радости должна быть утечка? Тут вообще новый объект, в новую переменную, где тут "старый"? Утечки происходят когда объекты регистрируются в глобальных переменных. В C# точно так же, ведь?
...
Рейтинг: 0 / 0
03.03.2017, 10:44
    #39413551
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
вадявезде написано, что Formatter использует буфер

Прям таки "везде"? Вот открываем JavaDoc
https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html
В описание класса - ни слова про буфер. Только в описании методов, когда запись ведётся в файл или stream.

вадяа StringBuilder выделяет память и при достижении границы - увеличивает.
про буфер ничего не говорится про увеличение, просто пишет в него.
есть разница?
StringBuilder, возможно, и есть буфер про который ты читал. Но понять нельзя что за источник информации у тебя такой, который "везде".
...
Рейтинг: 0 / 0
03.03.2017, 10:48
    #39413557
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
SQL2008Спасибо, это то, что нужно.
(немного неуютно чуcтвую себя в мире с new, но без delete)
Переиспользование объектов с коротким временим жизни это очень сомнительная оптимизация.
Во-первых объект может быть удалён при выходе из метода за счет escape analysis, что может оказаться дешевле чего чистки.
Многочисленные доступные для сборки объекты в GC удаляются скопом, если объектов много, то они быстро и умрут пачкой, что может быть на много быстрее чиски каждого отдельного объекта при переиспользовании. На поиск живых объектов количество "мертвых" не влияет.

Единственная весомая причина для переиспользования это экономия памяти.
...
Рейтинг: 0 / 0
03.03.2017, 11:11
    #39413574
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
BlazkowiczStringBuilder, возможно, и есть буфер про который ты читал. Но понять нельзя что за источник информации у тебя такой, который "везде".
скорее всего так оно и есть. в тех описаниях видимо под "буфер" подразумевали то куда пишут. не расшифровав это.
тогда
Formatter fmt = new Formatter();
остаётся единственым вариантом переиспользования?
и чем тогда (в моём примере использовании ) выгода перед String.format ?
...
Рейтинг: 0 / 0
03.03.2017, 11:16
    #39413578
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
вадяи чем тогда (в моём примере использовании ) выгода перед String.format ?
Нет никакой выгоды. Ты её сам придумал.
...
Рейтинг: 0 / 0
03.03.2017, 11:42
    #39413593
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
BlazkowiczНет никакой выгоды. Ты её сам придумал.
не я придумал. мне пытались это доказать тута...
...
Рейтинг: 0 / 0
03.03.2017, 12:27
    #39413616
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Очистка Formatter
вадяи чем тогда (в моём примере использовании ) выгода перед String.format ?
Код: java
1.
2.
3.
    public static String format(String format, Object... args) {
        return new Formatter().format(format, args).toString();
    }
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Очистка Formatter / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]