Итак, из моего понимания, PrintStream должен использовать какой-то Java Native Interfacing для связи с операционной системой, чтобы он мог писать на стандартный вывод, или использует java какую-то другую технику? Я хотел бы знать, как меня интересуют архитектуры JVM. Мне очень интересно понять, как это работает, и архитектурой самой системы.В Java, как PrintStream заканчивает печать текста на консоль?
ответ
Стандартный выходной поток в OpenJDK является PrintStream
, который оборачивает BufferedOutputStream
, который оборачивает FileOutputStream
который created от FileDescriptor
. Существуют специальные объекты FileDescriptor
, которые соответствуют стандарту stdin, stdout и stderr (в частности, см. FileDescriptor.out
). Они имеют хорошо известные номера (например, stdout file descriptor - 1
). Таким образом, реальная логика находится внутри метода FileOutputStream.writeBytes
, который, естественно, является родным. На стороне Java мы выполняем буферизацию, синхронизацию и перевод символов в байты. Материал низкого уровня (запись байтов непосредственно в дескриптор файла) выполняется с помощью собственного кода.
Java System.out
PrintStream
пишет в stdout. Википедия описывает stdout as,
Дескриптор файла для стандартного вывода - 1 (один); определение POSIX
<unistd.h>
:STDOUT_FILENO
; соответствующая переменная<stdio.h>
равнаFILE* stdout
; Аналогично, переменная<iostream>
равнаstd::cout
.
В то время как Javadoc для System.out
говорит (частично)
"стандартный" выходной поток. Этот поток уже открыт и готов принять выходные данные.
Значит, он использует JNI, чтобы сделать это правильно? – TheRenegade
Не обязательно, он встроен в JVM ... так что это может быть собственный код (он может просто записываться в базовый поток C++), или он может писать в дескриптор файла. –
Хм странно спасибо! – TheRenegade
- 1. Печать цветного текста на консоль в C++
- 2. Печать юникода на консоль
- 3. Java InputStream печать на консоль содержание
- 4. Печать char32_t на консоль
- 5. Печать таблицы на консоль с селеном Java
- 6. Печать переменных на консоль
- 7. Печать ULARGE_INTEGER на консоль
- 8. Печать на консоль с Jetty
- 9. PrintStream записи() в Java
- 10. Печать на консоль без наводнения в C++
- 11. Вход в консоль Java и печать GregorianCalendar
- 12. Java: PrintStream to String?
- 13. Java: Как читать из PrintStream?
- 14. GNU пролог, печать на консоль?
- 15. Печать на консоль Вне класса
- 16. java printstream файл изображения
- 17. печать формы JavaScript на консоль
- 18. Печать содержимого Java ArrayList по строкам на консоль
- 19. Печать большого стола на консоль
- 20. Печать содержимого элемента на консоль
- 21. dplyr печать на консоль смещена
- 22. Java: печать/вывод раскрашенного и отформатированного текста на консоль на компьютере с Windows
- 23. Безопасность потоков PrintStream в Java
- 24. Как очистить консоль Java?
- 25. Java - Консоль на апплете
- 26. Печать текста из программы java на принтер
- 27. консоль сообщений Java
- 28. Печать списка на консоль в формате таблицы
- 29. OpenWRT печать на консоль в сценариях preinit
- 30. Печать на консоль в скрипте ошпаривания
grepcode.com обычно является хорошим видом спорта, чтобы узнать такие вещи; в этом случае, однако, я не получил удовлетворительного заключения: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/sun/tools/jconsole/OutputViewer .java # 46, похоже, указывает на System.setOut (PipeListener.create ("System.out")); которые, как представляется, являются прослушивателями труб Unix ... оттуда там становится туманно ... но в конце, YES, это будут JVM-конкретные реализации, которые обращаются к ОС через JNI. Извините, я не мог больше помочь. – JayC667
Все в порядке. Я искал ту же самую меру при поиске ответа, поэтому я пришел сюда, спасибо! – TheRenegade