2015-07-15 1 views
-2

Этот вопрос конкретно относится к Java-версии входных потоков, но этот вопрос может, вероятно, применяться к другим языкам.Является непрочитанным входным потоком только указателем на файл?

Выполняет ли поток ввода как указатель на файл до тех пор, пока не будет сделан запрос на чтение? В игрушечной программе я работаю с передачей входного потока через несколько разных функций и хотел бы понять, передаю ли я весь файл в виде байтов, загруженных в ОЗУ, определенное количество байтов, которые загружаются в буфер, который в ОЗУ, или просто указатель на файл, который будет загружать байты в ОЗУ при чтении.

Использует ли тип входного потока разные реализации (т. Е. ByteArrayInputStream vs BufferedInputStream)?

+1

Что такое состояние javadoc? –

+0

«InputStream» - это просто то, из которого вы можете читать байты (по одному за раз, несколько за раз и т. Д.); он может или не может быть привязан к ресурсу файловой системы. Вы сами это сказали: есть 'ByteArrayInputStream'; это не связано с ресурсом файловой системы, не так ли? Единственное, что действительно важно, это то, что вы открываете, используете и закрываете ресурс должным образом. – fge

+0

Java не имеет указателей, только ссылки. Поэтому: нет, непрочитанный 'InputStream' не является указателем на файл. – Turing85

ответ

0

java.io.File, вероятно, ближе к идее указателя на файл. java.io.FileInputStream и другие InputStreams больше похожи на трансформаторы/чередования на сериализованное представление того, что читается.

С точки зрения передачи всего файла, ответ отрицательный. В Java все объекты передаются указателем ... Всего 4 байта. Таким образом, даже если вы загрузили весь файл в байт [], вы можете передать этот байт [] другим методам, и он практически не повлияет на память ... и не будет больше влияния, чем на передачу небольшого байта [].

BufferedInputStream s и BufferedReader s в основном только ueful для выполнения неэффективно чтение. Если вы пытаетесь прочитать весь файл или содержимое всего URL-адреса перед обработкой, буферизация не имеет значения. Если, с другой стороны, вы читаете файл по строкам, это когда Buffer полезен.

+0

Java не является ни переходом, ни передачей по указателю. [Это значение передается по значению] (http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value). – Turing85

+0

@ Turing85 да, я знаю. Но при передаче объектов вокруг это значение является указателем на объект, а не весь объект, как вы можете сделать в C/C++ – ControlAltDel

Смежные вопросы