SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Handling I/O in Java
 Techniques , Gotchas & Best Practices

                Hiranya Jayathilaka
           Senior Technical Lead – WSO2
                Apache Committer
Overview & Techniques
What is I/O?


Communication between the computer
       and the outside world
What’s in the Outside World?
• Human users
• Hardware devices
  – Monitors, keyboards, disk drives …
• Other computers and programs
Why Should We Care?
• An essential part of most programs
• Computers spend a lot of time performing
  nothing but I/O operations
• Very complicated business to deal with
• Ranks No.1 in the performance killer list
What are the Different Types of I/O?
•   Console I/O
•   Keyboard I/O
•   File I/O
•   Network I/O
•   …and possibly more
How Does Java Support I/O?
• The Java I/O API
  – The java.io package
  – Since JDK 1.0
  – Extensible
Stream




http://natureadore.blogspot.com/p/stream.html
Reading and Writing with Streams
  InputStream in = openInputStream();
  int b = in.read();

  byte[] data = new byte[1024];
  int len = in.read(data);

  OutputStream out = openOutputStream();
  out.write(b);
  Out.write(data, 0, len);
Readers and Writers
• Utilities for reading and writing character streams

  Reader reader = getReader();
  int ch = reader.read();

  char[] data = new char[1024];
  int len = reader.read(data);

  Writer writer = getWriter();
  writer.write(ch);
  writer.write(data, 0, len);
Bridging the Gap Between Bytes and
              Characters

InputStream in = openInputStream();
Reader reader = new InputStreamReader(in, “UTF-8”);

OutputStream out = openOutputStream();
Writer writer = new OutputStreamWriter(out, “UTF-8”);
Reading and Writing Typed Data
• Utilities to read primitive data and strings

DataInputStream in = new
  DataInputStream(openInputStream());
float num = in.readFloat();

DataOutputStream out = new
  DataOutputStream(openOutputStream());
out.writeFloat(num);
Buffered Vs Unbuffered
• Unbuffered – Each I/O request to the stream is
  directly handled by the underlying OS.
• Buffered – Each I/O request to the stream is
  executed on an in-memory buffer. OS invoked
  only when the buffer is empty.
Buffered I/O
InputStream in = new
  BufferedInputStream(openInputStream());
OutputStream out = new
  BufferedOutputStream(openOutputStream());

BufferedReader reader = new
  BufferedReader(getReader());
BufferedWriter writer = new
  BufferedWriter(getWriter());
Problems with Streams
    • Old school
    • Slow
    • Blocking




http://www.flickriver.com/photos/shazral/3565328977/
Alternatives?
• The Java New I/O (NIO) API
  – The java.nio package
  – Introduced in JDK 1.4
  – Leverages most efficient I/O operations of the
    underlying OS
  – Support for multiplexed, non-blocking I/O
Buffers
• A contiguous block of memory used to read
  and write bytes
• Memory can be allocated in a manner so that
  the underlying OS can directly access it (Direct
  buffers)
Reading and Writing with Buffers
 byte[] src = getData();
 ByteBuffer buf =
   ByteBuffer.allocateDirect(1024);
 buf.put(src);

 byte[] dest = new byte[1024];
 buf.flip();
 buf.get(dest);
Channels
• Represents an open connection to an I/O
  device
• Facilitates efficient bulk data transfers
  between devices and buffers
• A channel instance can be obtained from a
  class of the standard I/O package
Reading from a Channel
FileInputStream fin = new
  FileInputStream(“config.xml”);
FileChannel channel = fin.getChannel();
ByteBuffer buffer =
  ByteBuffer.allocateDirect(1024);
while (true) {
  buffer.clear();
  int len = channel.read(buffer);
  if (len == -1) {
      break;
  }
  buffer.flip();
  ...
}
Direct Channel Transfers
FileChannel in = new
  FileInputStream(source).getChannel();
FileChannel out = new
  FileOutputStream(target).getChannel();
in.transferTo(0, in.size(), out);
Memory Mapped Files
FileInputStream input = new
  FileInputStream(filename);
FileChannel channel = input.getChannel();
int fileLength = (int)channel.size();
MappedByteBuffer buffer =
  channel.map(FileChannel.MapMode.READ_ONLY,
  0, fileLength);
Multiplexed I/O with Selectors
    • A mechanism to register for I/O events on
      multiple channels and wait until at least one
      event occurs




http://tutorials.jenkov.com/java-nio/selectors.html
Registering for I/O Events
Selector selector = Selector.open();
channel1.register(selector, SelectionKey.OP_
  CONNECT | SelectionKey.OP_READ);
channel2.register(selector, SelectionKey.OP_
  CONNECT);
channel3.register(selector, SelectionKey.OP_
  WRITE);
‘Selecting’ a Channel
while (selector.select(500) > 0) {
  Set readyKeys = selector.selectedKeys();
  …
}
Non-blocking I/O
• Channels generally block until the I/O
  operations are complete (similar to streams)
• But some channel implementations can be
  made to work in a non-blocking manner

SocketChannel ch = SocketChannel.open();
ch.configureBlocking(false);
Standard I/O Vs. NIO
• A small demonstration…
NIO 2.0
• Introduced in JDK 1.7
• Even better support for file manipulation
  – Path, FileAttribute
  – Tree walk, File watch
• Asynchronous I/O
Hiranya’s Laws for Proper I/O
          Handling
  By a Developer for the Developers
Clean up your mess
Always close your streams and channels when you are done with
                            them
Buffering can be both your friend and
                enemy
  Don’t blindly wrap all streams with their buffered counter parts.
Buffering can yield good performance if you’re doing a lot of small I/O
   operations. Otherwise it only contributes to increased memory
                             consumption.
Don’t forget to flush after you!
If you’re using any buffered streams, make sure to flush them out
before closing the streams. Failing to do so may result in data loss.
There’s no escape from Karma and
                IOException
Developers often tend to ignore certain I/O exceptions thinking that they
 will never be thrown. But be aware that all I/O operations are prone to
             errors and may throw an exception at any time.
Java is platform independent – I/O is not
You need to do some additional work to make your I/O handling code
truly platform independent. Use the java.io.File abstraction instead of
strings to deal with files. Don’t make any assumptions about how the
             underlying OS handles certain I/O operations.
Concurrency and I/O Don’t Go Together
In a multi-user or multi-threaded environment, make sure that individual
 I/O operations are properly isolated. Attempting to access the same file
        or channel with concurrent threads can lead to disasters.
Nothing is perfect – Not even NIO
NIO is generally faster, but might not yield a significant performance gain
  in some scenarios. NIO code has a tendency to become complex and
difficult to understand. Also note that NIO is still an evolving technology.
Best way to write good I/O code is to not
              write them
  Use existing utilities and libraries that specialize in I/O handling.
Apache Commons IO
• A quick peek at the API and a demo
Questions?
Thank You

Weitere ähnliche Inhalte

Was ist angesagt?

Interface in java By Dheeraj Kumar Singh
Interface in java By Dheeraj Kumar SinghInterface in java By Dheeraj Kumar Singh
Interface in java By Dheeraj Kumar Singhdheeraj_cse
 
Java class,object,method introduction
Java class,object,method introductionJava class,object,method introduction
Java class,object,method introductionSohanur63
 
Advance Java Topics (J2EE)
Advance Java Topics (J2EE)Advance Java Topics (J2EE)
Advance Java Topics (J2EE)slire
 
Java Input Output and File Handling
Java Input Output and File HandlingJava Input Output and File Handling
Java Input Output and File HandlingSunil OS
 
Exception Handling
Exception HandlingException Handling
Exception HandlingSunil OS
 
Basic Java Programming
Basic Java ProgrammingBasic Java Programming
Basic Java ProgrammingMath-Circle
 
Exceptions in Java
Exceptions in JavaExceptions in Java
Exceptions in JavaVadym Lotar
 
Java exception handling ppt
Java exception handling pptJava exception handling ppt
Java exception handling pptJavabynataraJ
 
20.3 Java encapsulation
20.3 Java encapsulation20.3 Java encapsulation
20.3 Java encapsulationIntro C# Book
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in javaArafat Hossan
 
Files and streams In Java
Files and streams In JavaFiles and streams In Java
Files and streams In JavaRajan Shah
 
Data Types, Variables, and Operators
Data Types, Variables, and OperatorsData Types, Variables, and Operators
Data Types, Variables, and OperatorsMarwa Ali Eissa
 
Java: The Complete Reference, Eleventh Edition
Java: The Complete Reference, Eleventh EditionJava: The Complete Reference, Eleventh Edition
Java: The Complete Reference, Eleventh Editionmoxuji
 
String and string buffer
String and string bufferString and string buffer
String and string bufferkamal kotecha
 
Java conditional statements
Java conditional statementsJava conditional statements
Java conditional statementsKuppusamy P
 

Was ist angesagt? (20)

Java interfaces
Java interfacesJava interfaces
Java interfaces
 
Interface in java By Dheeraj Kumar Singh
Interface in java By Dheeraj Kumar SinghInterface in java By Dheeraj Kumar Singh
Interface in java By Dheeraj Kumar Singh
 
Java class,object,method introduction
Java class,object,method introductionJava class,object,method introduction
Java class,object,method introduction
 
Advance Java Topics (J2EE)
Advance Java Topics (J2EE)Advance Java Topics (J2EE)
Advance Java Topics (J2EE)
 
Control flow statements in java
Control flow statements in javaControl flow statements in java
Control flow statements in java
 
Java Input Output and File Handling
Java Input Output and File HandlingJava Input Output and File Handling
Java Input Output and File Handling
 
JAVA PROGRAMMING
JAVA PROGRAMMING JAVA PROGRAMMING
JAVA PROGRAMMING
 
Exception Handling
Exception HandlingException Handling
Exception Handling
 
I/O Streams
I/O StreamsI/O Streams
I/O Streams
 
Basic Java Programming
Basic Java ProgrammingBasic Java Programming
Basic Java Programming
 
Exceptions in Java
Exceptions in JavaExceptions in Java
Exceptions in Java
 
Java exception handling ppt
Java exception handling pptJava exception handling ppt
Java exception handling ppt
 
20.3 Java encapsulation
20.3 Java encapsulation20.3 Java encapsulation
20.3 Java encapsulation
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in java
 
Files and streams In Java
Files and streams In JavaFiles and streams In Java
Files and streams In Java
 
6. static keyword
6. static keyword6. static keyword
6. static keyword
 
Data Types, Variables, and Operators
Data Types, Variables, and OperatorsData Types, Variables, and Operators
Data Types, Variables, and Operators
 
Java: The Complete Reference, Eleventh Edition
Java: The Complete Reference, Eleventh EditionJava: The Complete Reference, Eleventh Edition
Java: The Complete Reference, Eleventh Edition
 
String and string buffer
String and string bufferString and string buffer
String and string buffer
 
Java conditional statements
Java conditional statementsJava conditional statements
Java conditional statements
 

Ähnlich wie Java I/O Best Practices and Techniques

CHAPTER 5 mechanical engineeringasaaa.pptx
CHAPTER 5 mechanical engineeringasaaa.pptxCHAPTER 5 mechanical engineeringasaaa.pptx
CHAPTER 5 mechanical engineeringasaaa.pptxSadhilAggarwal
 
Linux System Programming - Buffered I/O
Linux System Programming - Buffered I/O Linux System Programming - Buffered I/O
Linux System Programming - Buffered I/O YourHelper1
 
CSE3146-ADV JAVA M2.pdf
CSE3146-ADV JAVA M2.pdfCSE3146-ADV JAVA M2.pdf
CSE3146-ADV JAVA M2.pdfVithalReddy3
 
L21 io streams
L21 io streamsL21 io streams
L21 io streamsteach4uin
 
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)Elvin Gentiles
 
Java Input Output (java.io.*)
Java Input Output (java.io.*)Java Input Output (java.io.*)
Java Input Output (java.io.*)Om Ganesh
 
cpp-2013 #5 File and network input/output
cpp-2013 #5 File and network input/outputcpp-2013 #5 File and network input/output
cpp-2013 #5 File and network input/outputAmazon Web Services
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to pythonMohammed Rafi
 
Introduction to Python Programming
Introduction to Python ProgrammingIntroduction to Python Programming
Introduction to Python ProgrammingAkhil Kaushik
 
Various io stream classes .47
Various io stream classes .47Various io stream classes .47
Various io stream classes .47myrajendra
 
Various io stream classes .47
Various io stream classes .47Various io stream classes .47
Various io stream classes .47myrajendra
 
Unit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdUnit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdprat0ham
 
Exploring the Internet of Things Using Ruby
Exploring the Internet of Things Using RubyExploring the Internet of Things Using Ruby
Exploring the Internet of Things Using RubyMike Hagedorn
 
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon YangPractical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon YangLyon Yang
 

Ähnlich wie Java I/O Best Practices and Techniques (20)

CHAPTER 5 mechanical engineeringasaaa.pptx
CHAPTER 5 mechanical engineeringasaaa.pptxCHAPTER 5 mechanical engineeringasaaa.pptx
CHAPTER 5 mechanical engineeringasaaa.pptx
 
IOStream.pptx
IOStream.pptxIOStream.pptx
IOStream.pptx
 
Linux System Programming - Buffered I/O
Linux System Programming - Buffered I/O Linux System Programming - Buffered I/O
Linux System Programming - Buffered I/O
 
ch09.ppt
ch09.pptch09.ppt
ch09.ppt
 
CSE3146-ADV JAVA M2.pdf
CSE3146-ADV JAVA M2.pdfCSE3146-ADV JAVA M2.pdf
CSE3146-ADV JAVA M2.pdf
 
NIO.pdf
NIO.pdfNIO.pdf
NIO.pdf
 
L21 io streams
L21 io streamsL21 io streams
L21 io streams
 
JAVA INTRODUCTION - 1
JAVA INTRODUCTION - 1JAVA INTRODUCTION - 1
JAVA INTRODUCTION - 1
 
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
Smash the Stack: Writing a Buffer Overflow Exploit (Win32)
 
Java Input Output (java.io.*)
Java Input Output (java.io.*)Java Input Output (java.io.*)
Java Input Output (java.io.*)
 
cpp-2013 #5 File and network input/output
cpp-2013 #5 File and network input/outputcpp-2013 #5 File and network input/output
cpp-2013 #5 File and network input/output
 
Introduction to python
Introduction to pythonIntroduction to python
Introduction to python
 
Introduction to Python Programming
Introduction to Python ProgrammingIntroduction to Python Programming
Introduction to Python Programming
 
MODULE 1.pptx
MODULE 1.pptxMODULE 1.pptx
MODULE 1.pptx
 
Various io stream classes .47
Various io stream classes .47Various io stream classes .47
Various io stream classes .47
 
Various io stream classes .47
Various io stream classes .47Various io stream classes .47
Various io stream classes .47
 
Unit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rdUnit 1 Core Java for Compter Science 3rd
Unit 1 Core Java for Compter Science 3rd
 
Os lectures
Os lecturesOs lectures
Os lectures
 
Exploring the Internet of Things Using Ruby
Exploring the Internet of Things Using RubyExploring the Internet of Things Using Ruby
Exploring the Internet of Things Using Ruby
 
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon YangPractical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
Practical IoT Exploitation (DEFCON23 IoTVillage) - Lyon Yang
 

Mehr von Hiranya Jayathilaka

REST Coder: Auto Generating Client Stubs and Documentation for REST APIs
REST Coder: Auto Generating Client Stubs and Documentation for REST APIsREST Coder: Auto Generating Client Stubs and Documentation for REST APIs
REST Coder: Auto Generating Client Stubs and Documentation for REST APIsHiranya Jayathilaka
 
API Facade Pattern with Apache Synapse
API Facade Pattern with Apache SynapseAPI Facade Pattern with Apache Synapse
API Facade Pattern with Apache SynapseHiranya Jayathilaka
 
JAVA Colombo - What We've Been Up To
JAVA Colombo - What We've Been Up ToJAVA Colombo - What We've Been Up To
JAVA Colombo - What We've Been Up ToHiranya Jayathilaka
 

Mehr von Hiranya Jayathilaka (6)

REST Coder: Auto Generating Client Stubs and Documentation for REST APIs
REST Coder: Auto Generating Client Stubs and Documentation for REST APIsREST Coder: Auto Generating Client Stubs and Documentation for REST APIs
REST Coder: Auto Generating Client Stubs and Documentation for REST APIs
 
Apache JClouds
Apache JCloudsApache JClouds
Apache JClouds
 
API Facade Pattern with Apache Synapse
API Facade Pattern with Apache SynapseAPI Facade Pattern with Apache Synapse
API Facade Pattern with Apache Synapse
 
JAVA Colombo - What We've Been Up To
JAVA Colombo - What We've Been Up ToJAVA Colombo - What We've Been Up To
JAVA Colombo - What We've Been Up To
 
Welcome to JAVA Colombo
Welcome to JAVA ColomboWelcome to JAVA Colombo
Welcome to JAVA Colombo
 
Introduction to Apache Synapse
Introduction to Apache SynapseIntroduction to Apache Synapse
Introduction to Apache Synapse
 

Kürzlich hochgeladen

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 

Kürzlich hochgeladen (20)

08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 

Java I/O Best Practices and Techniques

  • 1. Handling I/O in Java Techniques , Gotchas & Best Practices Hiranya Jayathilaka Senior Technical Lead – WSO2 Apache Committer
  • 3. What is I/O? Communication between the computer and the outside world
  • 4. What’s in the Outside World? • Human users • Hardware devices – Monitors, keyboards, disk drives … • Other computers and programs
  • 5. Why Should We Care? • An essential part of most programs • Computers spend a lot of time performing nothing but I/O operations • Very complicated business to deal with • Ranks No.1 in the performance killer list
  • 6. What are the Different Types of I/O? • Console I/O • Keyboard I/O • File I/O • Network I/O • …and possibly more
  • 7. How Does Java Support I/O? • The Java I/O API – The java.io package – Since JDK 1.0 – Extensible
  • 9. Reading and Writing with Streams InputStream in = openInputStream(); int b = in.read(); byte[] data = new byte[1024]; int len = in.read(data); OutputStream out = openOutputStream(); out.write(b); Out.write(data, 0, len);
  • 10. Readers and Writers • Utilities for reading and writing character streams Reader reader = getReader(); int ch = reader.read(); char[] data = new char[1024]; int len = reader.read(data); Writer writer = getWriter(); writer.write(ch); writer.write(data, 0, len);
  • 11. Bridging the Gap Between Bytes and Characters InputStream in = openInputStream(); Reader reader = new InputStreamReader(in, “UTF-8”); OutputStream out = openOutputStream(); Writer writer = new OutputStreamWriter(out, “UTF-8”);
  • 12. Reading and Writing Typed Data • Utilities to read primitive data and strings DataInputStream in = new DataInputStream(openInputStream()); float num = in.readFloat(); DataOutputStream out = new DataOutputStream(openOutputStream()); out.writeFloat(num);
  • 13. Buffered Vs Unbuffered • Unbuffered – Each I/O request to the stream is directly handled by the underlying OS. • Buffered – Each I/O request to the stream is executed on an in-memory buffer. OS invoked only when the buffer is empty.
  • 14. Buffered I/O InputStream in = new BufferedInputStream(openInputStream()); OutputStream out = new BufferedOutputStream(openOutputStream()); BufferedReader reader = new BufferedReader(getReader()); BufferedWriter writer = new BufferedWriter(getWriter());
  • 15. Problems with Streams • Old school • Slow • Blocking http://www.flickriver.com/photos/shazral/3565328977/
  • 16. Alternatives? • The Java New I/O (NIO) API – The java.nio package – Introduced in JDK 1.4 – Leverages most efficient I/O operations of the underlying OS – Support for multiplexed, non-blocking I/O
  • 17. Buffers • A contiguous block of memory used to read and write bytes • Memory can be allocated in a manner so that the underlying OS can directly access it (Direct buffers)
  • 18. Reading and Writing with Buffers byte[] src = getData(); ByteBuffer buf = ByteBuffer.allocateDirect(1024); buf.put(src); byte[] dest = new byte[1024]; buf.flip(); buf.get(dest);
  • 19. Channels • Represents an open connection to an I/O device • Facilitates efficient bulk data transfers between devices and buffers • A channel instance can be obtained from a class of the standard I/O package
  • 20. Reading from a Channel FileInputStream fin = new FileInputStream(“config.xml”); FileChannel channel = fin.getChannel(); ByteBuffer buffer = ByteBuffer.allocateDirect(1024); while (true) { buffer.clear(); int len = channel.read(buffer); if (len == -1) { break; } buffer.flip(); ... }
  • 21. Direct Channel Transfers FileChannel in = new FileInputStream(source).getChannel(); FileChannel out = new FileOutputStream(target).getChannel(); in.transferTo(0, in.size(), out);
  • 22. Memory Mapped Files FileInputStream input = new FileInputStream(filename); FileChannel channel = input.getChannel(); int fileLength = (int)channel.size(); MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, fileLength);
  • 23. Multiplexed I/O with Selectors • A mechanism to register for I/O events on multiple channels and wait until at least one event occurs http://tutorials.jenkov.com/java-nio/selectors.html
  • 24. Registering for I/O Events Selector selector = Selector.open(); channel1.register(selector, SelectionKey.OP_ CONNECT | SelectionKey.OP_READ); channel2.register(selector, SelectionKey.OP_ CONNECT); channel3.register(selector, SelectionKey.OP_ WRITE);
  • 25. ‘Selecting’ a Channel while (selector.select(500) > 0) { Set readyKeys = selector.selectedKeys(); … }
  • 26. Non-blocking I/O • Channels generally block until the I/O operations are complete (similar to streams) • But some channel implementations can be made to work in a non-blocking manner SocketChannel ch = SocketChannel.open(); ch.configureBlocking(false);
  • 27. Standard I/O Vs. NIO • A small demonstration…
  • 28. NIO 2.0 • Introduced in JDK 1.7 • Even better support for file manipulation – Path, FileAttribute – Tree walk, File watch • Asynchronous I/O
  • 29. Hiranya’s Laws for Proper I/O Handling By a Developer for the Developers
  • 30. Clean up your mess Always close your streams and channels when you are done with them
  • 31. Buffering can be both your friend and enemy Don’t blindly wrap all streams with their buffered counter parts. Buffering can yield good performance if you’re doing a lot of small I/O operations. Otherwise it only contributes to increased memory consumption.
  • 32. Don’t forget to flush after you! If you’re using any buffered streams, make sure to flush them out before closing the streams. Failing to do so may result in data loss.
  • 33. There’s no escape from Karma and IOException Developers often tend to ignore certain I/O exceptions thinking that they will never be thrown. But be aware that all I/O operations are prone to errors and may throw an exception at any time.
  • 34. Java is platform independent – I/O is not You need to do some additional work to make your I/O handling code truly platform independent. Use the java.io.File abstraction instead of strings to deal with files. Don’t make any assumptions about how the underlying OS handles certain I/O operations.
  • 35. Concurrency and I/O Don’t Go Together In a multi-user or multi-threaded environment, make sure that individual I/O operations are properly isolated. Attempting to access the same file or channel with concurrent threads can lead to disasters.
  • 36. Nothing is perfect – Not even NIO NIO is generally faster, but might not yield a significant performance gain in some scenarios. NIO code has a tendency to become complex and difficult to understand. Also note that NIO is still an evolving technology.
  • 37. Best way to write good I/O code is to not write them Use existing utilities and libraries that specialize in I/O handling.
  • 38. Apache Commons IO • A quick peek at the API and a demo