blob: c2e677477e81bc618ea4e9e09ac38624da2de602 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<title>1.1 - NIO Overview &mdash; Apache MINA</title>
<link href="/assets/css/common.css" rel="stylesheet" type="text/css"/>
<link href="/assets/css/mina.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<script src="https://www.apachecon.com/event-images/snippet.js"></script>
<div id="container">
<div id="header">
<div id="subProjectsNavBar">
<a href="/">
Apache MINA Project
</a>
&nbsp;|&nbsp;
<a href="/mina-project/">
<strong>MINA</strong>
</a>
&nbsp;|&nbsp;
<a href="/asyncweb-project/">
AsyncWeb
</a>
&nbsp;|&nbsp;
<a href="/ftpserver-project/">
FtpServer
</a>
&nbsp;|&nbsp;
<a href="/sshd-project/">
SSHD
</a>
&nbsp;|&nbsp;
<a href="/vysper-project/">
Vysper
</a>
</div>
</div>
<div id="content">
<div id="leftColumn">
<div id="navigation">
<a class="acevent" data-format="wide" data-width="170"></a>
<h5>Social Networks</h5>
<ul>
<li><a href="https://fosstodon.org/@apachemina">Apache MINA Mastodon</a></li>
</ul>
<h5>Latest Downloads</h5>
<ul>
<li><a href="/mina-project/downloads_2_0.html">Mina 2.0.25</a></li>
<li><a href="/mina-project/downloads_2_1.html">Mina 2.1.8</a></li>
<li><a href="/mina-project/downloads_2_2.html">Mina 2.2.3</a></li>
<li><a href="/mina-project/downloads_old.html">Mina old versions</a></li>
</ul>
<h5>Documentation</h5>
<ul>
<li><a href="/mina-project/documentation.html" class="external-link" rel="nofollow">Base documentation</a></li>
<li><a href="/mina-project/userguide/user-guide-toc.html" class="external-link" rel="nofollow">User guide</a></li>
<li><a href="/mina-project/2.2-vs-2.1.html" class="external-link" rel="nofollow">2.2 vs 2.1</a></li>
<li><a href="/mina-project/2.1-vs-2.0.html" class="external-link" rel="nofollow">2.1 vs 2.0</a></li>
<li><a href="/mina-project/features.html" class="external-link" rel="nofollow">Features</a></li>
<li><a href="/mina-project/road-map.html" class="external-link" rel="nofollow">Road Map</a></li>
<li><a href="/mina-project/quick-start-guide.html" class="external-link" rel="nofollow">Quick Start Guide</a></li>
<li><a href="/mina-project/faq.html" class="external-link" rel="nofollow">FAQ</a></li>
</ul>
<h5>Resources</h5>
<ul>
<li><a href="/mina-project/mailing-lists.html" class="external-link" rel="nofollow">Mailing lists &amp; IRC</a></li>
<li><a href="/mina-project/issue-tracking.html" class="external-link" rel="nofollow">Issue tracking</a></li>
<li><a href="/mina-project/sources.html" class="external-link" rel="nofollow">Sources</a></li>
<li><a href="/mina-project/gen-docs/latest-2.0/apidocs/index.html" class="external-link" rel="nofollow">API Javadoc 2.0.25</a></li>
<li><a href="/mina-project/gen-docs/latest-2.1/apidocs/index.html" class="external-link" rel="nofollow">API Javadoc 2.1.8</a></li>
<li><a href="/mina-project/gen-docs/latest-2.2/apidocs/index.html" class="external-link" rel="nofollow">API Javadoc 2.2.3</a></li>
<li><a href="/mina-project/gen-docs/latest-2.0/xref/index.html" class="external-link" rel="nofollow">API xref 2.0.25</a></li>
<li><a href="/mina-project/gen-docs/latest-2.1/xref/index.html" class="external-link" rel="nofollow">API xref 2.1.8</a></li>
<li><a href="/mina-project/gen-docs/latest-2.2/xref/index.html" class="external-link" rel="nofollow">API xref 2.2.3</a></li>
<li><a href="/mina-project/performances.html" class="external-link" rel="nofollow">Performances</a></li>
<li><a href="/mina-project/testimonials.html" class="external-link" rel="nofollow">Testimonials</a></li>
<li><a href="/mina-project/conferences.html" class="external-link" rel="nofollow">Conferences</a></li>
<li><a href="/mina-project/developer-guide.html" class="external-link" rel="nofollow">Developers Guide</a></li>
<li><a href="/mina-project/related-projects.html" class="external-link" rel="nofollow">Related Projects</a></li>
<li><a href="https://people.apache.org/~vgritsenko/stats/projects/mina.html" class="external-link" rel="nofollow">Statistics</a></li>
</ul>
<h5>Community</h5>
<ul>
<li><a href="https://www.apache.org/foundation/contributing.html" class="external-link" rel="nofollow">Contributing</a></li>
<li><a href="/contributors.html" class="external-link" rel="nofollow">Team</a></li>
<li><a href="/special-thanks.html" class="external-link" rel="nofollow">Special Thanks</a></li>
<li><a href="https://www.apache.org/security/" class="external-link" rel="nofollow">Security</a></li>
</ul>
<h5>About Apache</h5>
<ul>
<li><a href="https://www.apache.org" class="external-link" rel="nofollow">Apache main site</a></li>
<li><a href="https://www.apache.org/licenses/" class="external-link" rel="nofollow">License</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html" title="The ASF sponsorship program" class="external-link" rel="nofollow">Sponsorship program</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html" class="external-link" rel="nofollow">Thanks</a></li>
</ul>
<h3><a name="Navigation-Upcoming"></a>Upcoming</h3>
<ul>
<li>No event</li>
</ul>
</div>
</div>
<div id="rightColumn">
<div class="nav">
<div class="nav_prev">
<a href="ch1-getting-started.html">Chapter 1 - Getting Started</a>
</div>
<div class="nav_up">
<a href="ch1-getting-started.html">Chapter 1 - Getting Started</a>
</div>
<div class="nav_next">
<a href="ch1.2-why-mina.html">1.2 - Why MINA ?</a>
</div>
<div class="clearfix"></div>
</div>
<h1 id="nio-overview">NIO Overview</h1>
<p>The <strong>NIO</strong> API was introduced in <strong>Java 1.4</strong> and had since been used for wide number of applications. The <strong>NIO</strong> API covers <strong>IO</strong> non-blocking operations.</p>
<div class="note" markdown="1">
First of all, it's good to know that <strong>MINA</strong> is written on top of <strong>NIO 1</strong>. A new version has been designed in <strong>Java 7</strong>, <strong>NIO-2</strong>, we don't yet benefit from the added features this version is carrying.
</div>
<div class="note" markdown="1">
It's also important to know that the <strong>N</strong> in <strong>NIO</strong> means <strong>New</strong>, but we will use the <strong>Non-Blocking</strong> term in many places. <strong>NIO-2</strong> should be seen as a <strong>New New I/O</strong>...
</div>
<p>The <code>java.nio.*</code> package contains following key constructs</p>
<ul>
<li><em>Buffers</em> - Data Containers</li>
<li><em>Chartsets</em> - Containers translators for bytes and Unicode</li>
<li><em>Channels</em> - represents connections to entities capable of I/O operations</li>
<li><em>Selectors</em> - provide selectable, multiplexed non-blocking IO</li>
<li><em>Regexps</em> - provide provide some tools to manipulate regular expressions</li>
</ul>
<p>We are mostly interested in the <em>Channels</em>, <em>Selectors</em> and <em>Buffers</em> parts in the <strong>MINA</strong> framework, except that we want to hide those elements to the user.</p>
<p>This user guide will thus focus on everything built on top of those internal components.</p>
<h1 id="nio-vs-bio">NIO vs BIO</h1>
<p>It&rsquo;s important to understand the difference between those two APIs. <strong>BIO</strong>, or <strong>Blocking</strong> <strong>IO</strong>, relies on plain sockets used in a blocking mode : when you read, write or do whatever operation on a socket, the called operation will block the caller until the operation is completed.</p>
<p>In some cases, it&rsquo;s critical to be able to call the operation, and to expect the called operation to inform the caller when the operation is done : the caller can then do something else in the mean time.</p>
<p>This is also where <strong>NIO</strong> offers a better way to handle <strong>IO</strong> when you have numerous connected sockets : you dn&rsquo;t have to create a specific thread for each connection, you can just use a few threads to do the same job.</p>
<p>If you want to get more information about what covers <strong>NIO</strong>, there is a lot of good articles around the web, and a few books covering this matter.</p>
<div class="nav">
<div class="nav_prev">
<a href="ch1-getting-started.html">Chapter 1 - Getting Started</a>
</div>
<div class="nav_up">
<a href="ch1-getting-started.html">Chapter 1 - Getting Started</a>
</div>
<div class="nav_next">
<a href="ch1.2-why-mina.html">1.2 - Why MINA ?</a>
</div>
<div class="clearfix"></div>
</div>
</div>
<div id="endContent"></div>
</div>
<div id="footer">
&copy; 2003-2024, <a href="https://www.apache.org">The Apache Software Foundation</a> - <a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a><br />
Apache MINA, MINA, Apache Vysper, Vysper, Apache SSHd, SSHd, Apache FtpServer, FtpServer, Apache AsyncWeb, AsyncWeb,
Apache, the Apache feather logo, and the Apache Mina project logos are trademarks of The Apache Software Foundation.
</div>
</div>
</body>
</html>