2010-05-13 4 views
2

Я занимаюсь Java в течение 14 лет, и почти ничего больше последние 6 лет или около того.Есть ли java-библиотека/пакет, аналогичный <stdio.h>?

Я действительно ненавижу пакет java.io - его легион подклассов и адаптеров. I do как исключения, вместо того, чтобы всегда проводить опрос «errno» и т. П., Но я мог бы без всяких исключений бывать.

Есть ли что-нибудь, что функционирует как подпрограммы Unix/ANSI stdio.h в C?

Я знаю, что мы никогда не избавимся от java.io и его соглашений до тех пор, пока сам java не будет удален, поскольку они метастазируются во многих фреймворках, которые расширились до java. Тем не менее, мне хотелось бы что-то вроде этого (назовем его пакетом javax.stdio):

Имейте основной класс утилиты, возможно, FileStar, который может читать и записывать файлы (или трубы), либо текст, либо двоичный, либо последовательный, либо произвольный доступ, с конструкторами, имитирующими fopen() и popen().

Этот класс должен обладать полезными методами, такими как fread(), fwrite(), fgets(), fputs(), fseek() и все остальное (fprintf()?). Методы, которые несовместимы с режимом open/construct, просто вызывают (как и некоторые классы/методы коллекций, когда они ограничены).

Затем у вас есть куча интерфейсов, которые подсказывают, как вы собираетесь использовать поток после его создания: последовательный, RandomAccess, ReadOnly, WriteOnly, текст, двоичный код, а также комбинации из них, которые имеют смысл. Возможно, даже есть методы, чтобы вернуть соответствующий тип-литье (интерфейс), бросая, если вы попросили что-то несовместимое.

Для дополнительного аромата пропустите объявленные исключения - например. - javax.stdio.IOException расширяет RuntimeException.

Есть ли проект с открытым исходным кодом, похожий на этот плавающий?

+1

Вы считаете [Commons IO] (http://commons.apache.org/io/), чтобы сделать код ввода-вывода менее подробным? Особенно классы, заканчивающиеся на 'Utils' в названии. Например. ['IOUtils'] (http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils.html) и [' FileUtils'] (http://commons.apache.org /io/api-release/org/apache/commons/io/FileUtils.html). – BalusC

+0

@BalusC: спасибо, не совсем то, что я искал, но есть некоторые маленькие драгоценные камни, например: http://commons.apache.org/io/api-release/org/apache/commons/io/IOUtils .html # toByteArray% 28java.io.Reader% 29) – Roboprog

ответ

4

Библиотека Java IO не самая лучшая, но вы должны в основном жить с ней. Код типа C в C. Код, например Java в Java. Классы Java IO довольно просты, если не немного подробные.

В качестве альтернативы вы можете использовать пакеты Java NIO, но они, как правило, имеют более специализированные варианты использования.

0

Насколько я знаю, нет ничего такого, как stdio для Java. И я не думаю, что это было бы реализовано в чистой Java.

На самом деле, я думаю, вы найдете, что Большинство опытных разработчиков Java с фоном C считают, что Java I/O является большим улучшением по сравнению с C stdio. Особенно сейчас, когда Java имеет аналоги для printf и scanf.

+0

Имея исключения вместо того, чтобы не забывать проверять коды ошибок и возвращаемые значения магии *, является улучшением. Для размещения трех конструкторов для открытия и чтения текстового файла нет. Имея 1 «интерфейс» (FILE *) и 2 «заводских метода» (fopen() & popen()), лучше, IMHO, чем иметь (с Java 1.5) 12 интерфейсов и 49 классов (не уверен, сколько из 49). – Roboprog

1

Вы изучали пакеты java.nio и java.nio.file (в Java 7)?

+0

Из того, что я видел в NIO, он, похоже, ориентирован на более сложные вещи, такие как опрос нескольких каналов и выбор того, с каким текущим действием работает поток. Но я мог что-то упустить. – Roboprog