Java's IO stream is the basis for realizing input/output. It can easily implement data input/output operations. Different input/output sources are abstractly expressed as "streams" in Java.
A stream is a set of ordered bytes and is a general term or abstraction for data transmission.
Streams have input and output. During input, the stream flows from the data source to the program. When outputting, the stream is transferred from the program to the data source, and the data source can be memory, file, network or program, etc.
User process and operating system kernel
The IO in Java can be understood as being between the Java program and the operating system kernel. between objects.
The blocking and non-blocking, synchronization and asynchronous mentioned later are the result of the interaction between these two objects. In this article, the user process refers to the Java program.
Program space and kernel space
Waiting for the data to be ready(waiting for the data to arrive in the kernel buffer)
Copying the data from the kernel to the process (copy data from kernel buffer to program buffer)
In Linux, for a read IO operation, the data will not be copied directly to the program buffer of the program.
It will first be copied to the buffer of the operating system kernel, and then copied from the buffer of the operating system kernel to the buffer of the application.
Program space: The memory space allocated to user programs.
Kernel space: The memory space owned by the kernel.
Blocking and non-blocking
Blocking: After the user process makes a system call, the user process is always in a locked state and cannot perform other operations
Non Blocking: After the user process makes a system call, the user process is not locked and can perform other operations
Blocking and non-blocking refer to the status of the user process, that is, whether the user process is locked
Synchronous and asynchronous
A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes.
An asynchronous I/O operation does not cause the requesting process to be blocked.
A synchronous io operation will cause the requesting process to block until the io operation is completed. An asynchronous IO operation will not cause the requesting thread to be blocked.
Synchronization: The user thread and the io thread do the same thing (the user thread is blocked, waiting for the kernel to return the processing result)
Asynchronous: The user thread and the io thread do different things (the user thread does not Blocked, do other things, the kernel processing is completed and the results are sent to the user thread)
File descriptor
Everything is a file under Linux. A file descriptor is an index created by the kernel for a file. All I/O operations are performed by calling the file descriptor (index), including the socket we will mention below. When Linux first starts, it will automatically set 0 as standard input, 1 as standard output, and 2 as standard error.
The above is the detailed content of Why is java io important?. For more information, please follow other related articles on the PHP Chinese website!