|
JDK 1.4 Tutorial Gregory M. Travis 2002 | 408 pages ISBN: 1930110456 |
|||
| $34.95 | Softbound print book | Out of print (?) | |
![]() |
$17.50 | PDF ebook | |
Table of Contents
preface xv
acknowledgments xvii
about this book xix
author online xxvii
about the cover illustration xxix
- 1 Basic NIO (New Input/Output) 1
- 1.1 Doing I/O with channels and buffers 2
- Getting a channel from a stream 3
- Creating a buffer revision 4
- Reading from a channel 4
- Writing to a channel 5
- Reading and writing together 6
- 1.2 Understanding buffers 7
- Creating buffers 7
- get() and put() 7
- Buffer state values 9
- flip() and clear() 10
- slice() and subbuffers 12
- Buffers of other types 13
- Reading and writing other types from a ByteBuffer 14
- Direct buffers 16
- Example: TCP/IP forwarding 17
- Doing I/O with channels and buffers 27
- 1.3 The File Locking facility 28
- Types of locks 28
- Using locks 29
- Acquiring locks 30
- Portability issues 31
- Example: a simple database 32
- 1.4 Summary 36
- 2 Advanced NIO (New Input/Output) 37
- 2.1 Reading and writing with MappedByteBuffers 38
- Advantages of MappedByteBuffers 38
- Disadvantages of MappedByteBuffers 40
- Using MappedByteBuffers 40
- Example: checksumming 41
- 2.2 Nonblocking I/O 42
- The multithreaded approach 43
- The really bad single-threaded approach 44
- Polling 44
- Example: a polling chat server 46
- Multiplexing with select() 49
- 2.3 Encoding and decoding with Charsets 58
- Decoding and encoding 59
- Finding available Charsets 59
- Using encoders and decoders 61
- 2.4 Network interfaces 63
- When to use a network interface 64
- Getting a list of NetworkInterfaces 64
- Reporting on NetworkInterfaces 64
- Getting a list of InetAddresses 66
- Getting a NetworkInterface by InetAddress 66
- Getting a NetworkInterface by name 67
- Listening on a particular address 67
- 2.5 Summary 73
- 3 Java2D 75
- 3.1 The Print Service API 76
- Print Service packages 76
- Document flavors 77
- Printer discovery 77
- Printer attributes 79
- The SimpleDoc class 80
- The DocPrintJob interface 81
- Example: printing an image 81
- Example: a custom print dialog box 83
- 3.2 Reading and writing images with the Image I/O API 88
- The plug-in model 89
- Simple reading 89
- Simple writing 90
- The ImageIO class 90
- Discovering available formats 90
- Example: reading and displaying an image 92
- Example: writing an image 92
- The ImageReader class 93
- The ImageWriter class 95
- Customizing the reading process 97
- Listeners 99
- Example: generating a graph 102
- 3.3 Summary 105
- 4 Java Web Start (JAWS) 107
4.1 Understanding the JAWS execution model 108 - Client, server, and application 109
- The sandbox 110
- Consider the possibilities 110
- 4.2 Building and deploying a JAWS application 111
- JAR files 111
- The JNLP file 111
- Configuring the web server 113
- 4.3 Using the sandbox: services 113
- Using the sandbox: resources 114
- 4.4 Bypassing the sandbox 115
- 4.5 Example: a simple drawing program 117
- PicoDraw.java 118
- DrawCanvas.java 131
- TransferableImage.java 135
- 4.6 Summary 136
- 5 Logging 137
- 5.1 Logging overview 138
- Log message format 139
- Logging levels 139
- Logger names and the logger hierarchy 140
- Logging methods 141
- The LogRecord class 141
- Handlers 142
- Filters 143
- Formatters 143
- Logging efficiency 144
- The philosophy of logging 144
- 5.2 Configuring the Logging system 145
- Configuring handlers 145
- Configuration values for standard handlers 146
- Configuring loggers 148
- Global handlers 149
- 5.3 Using logging in a program 149
- 5.4 Writing a custom handler 155
- 5.5 Writing a custom formatter 165
- 5.6 Summary 168
- 6 Assertion facility 171
- 6.1 Assertion basics 172
- Why use assertions? 172
- Assertions vs. other error code 173
- Designing by contract 174
- 6.2 Working with assertions 174
- Assertion syntax 175
- Compiling with assertions 177
- Controlling assertions from the command line 178
- Controlling assertions programmatically 181
- Removing assertions completely 182
- Determining if assertions are enabled 183
- Catching an assertion failure 184
- Assertions and class initialization 185
- 6.3 Assertion examples 187
- Avoiding inconsistent states 187
- Narrowing the range of states 189
- Ensuring consistency between container objects and contained objects 189
- More complicated consistency checks 192
- 6.4 Knowing when to use assertions 193
- Rules of use 193
- What to check for 197
- Miscellaneous rules 202
- 6.5 Summary 204
- 7 Exceptions 205
- 7.1 Chained exceptions 206
- 7.2 StackTraceElements 208
- What is a stack trace? 208
- Using StackTraceElements 210
- Writing a custom stack trace dumper 210
- Synthesizing a stack trace 215
- 7.3 Summary 228
- 7.2 StackTraceElements 208
- 8 Collections 229
- 8.1 Utilities 230
- Rotating list elements 230
- Replacing list elements 232
- Finding sublists within lists 232
- Swapping list elements 233
- Converting enumerations to lists 233
- 8.2 LinkedHashMap and LinkedHashSet 235
- Using LinkedHashMap 235
- Using LinkedHashSet 238
- Efficiency of LinkedHashMap and LinkedHashSet 240
- Example: searching a file path 241
- 8.3 IdentityHashMap 246
- Object equality 246
- Hashing and equality 247
- Example: using the IdentityHashMap 247
- 8.4 The RandomAccess interface 252
- 8.5 Summary 255
- 9 Regular Expressions 257
- 9.1 Overview of regular expressions 258
- Literals 259
- The . wildcard 259
- Quantifiers: * and + 259
- Grouping with () 260
- Character classes 260
- Predefined character classes 261
- Sequencing and alternation 263
- Boundary matchers 263
- Reluctant (non-greedy) matching 264
- Other features 265
- 9.2 Pattern and Matcher 265
- Capturing groups 267
- Find and replace 268
- Flags 269
- 9.3 Transitioning from Perl to Java 270
- Finding the longest word in a line 270
- Parsing a tab-delimited file 273
- A command-line processor 276
- Parsing and modifying names 280
- 9.4 Example: HTML templating system 285
- 9.5 Example: a lexical analyzer 288
- 9.6 Summary 296
- 10 The Preferences API 297
- 10.1 What the Preferences API is for 298
- Simple Preferences API example 298
- Appropriate applications of the Preferences API 299
- Design goals of the Preferences API 301
- 10.2 Knowing when to use the Preferences API 304
- Comparison with java.util.Properties 304
- Comparison with JNDI 305
- 10.3 Understanding the data hierarchy 305
- Tree-like structure 305
- Key/value pairs 305
- System vs. user 306
- Definition of a user 306
- Pathnames 307
- Per-package subtrees 308
- 10.4 Using the API 308
- Traversing the data hierarchy 308
- Reading and writing values 311
- Allowable types 311
- Allowable keys 312
- Allowable values 312
- Allowable node names 313
- Default values 313
- Removing values 314
- Iterating through the values in a node 314
- Distinguishing between user and system nodes 314
- Node names and paths 315
- Getting parent and child nodes 316
- Determining the presence of nodes 316
- Removing nodes 317
- Flushing 318
- Syncing 318
- Example: storing GUI configuration 319
- 10.5 Change listeners 324
- Preference change listeners 325
- Node change listeners 325
- Example: listening for a GUI change request 326
- Example: changing server ports on the fly 329
- 10.7 Importing and exporting 335
- 10.8 Summary 337
- 11 The Java Secure Socket Extension (JSSE) 339
- 11.1 Cryptographic terminology 340
- 11.2 SSL—the Secure Sockets Layer 342
- Components of the default implementation 342
- SSL handshaking 343
- 11.3 Managing keys 343
- Creating keys with keytool 344
- Store keys in a KeyStore 344
- Creating a KeyManagerFactory 344
- Creating a TrustManagerFactory 345
- Creating an SSLContext 345
- 11.4 Example: a trivial secure web server 346
- The authentication model 346
- Generating the key 347
- The configuration file 348
- The code 349
- 11.5 Example: a secure credit card authorization system 359
- The authentication model 359
- Generating the keys 360
- The code 362
- 11.6 Summary 370
index 371 - 11.2 SSL—the Secure Sockets Layer 342
DESCRIPTION
Java is a success. It is now used across the programming landscape, from embedded devices to enterprise-class distributed systems. As Java's use increases, the pressure grows for it to expand to meet the diverse needs of the developer communities. The latest edition of Java, JDK 1.4 (or J2SE 1.4), includes new features like a new I/O system, a persistent preferences framework, Java Web Start, and Java regular expressions.
This book lets experienced developers as well as novices learn JDK 1.4's new features quickly. It provides a clear exposition of the important new topics with plenty of well documented code. All the examples are substantial and solve real-world problems but aren't cluttered with unnecessary details. The new features are covered in a comprehensive and matter-of-fact way without digressions into philosophy or theory. After reading this book, a developer will be able to use Java's new features with confidence and skill.
What's Inside
- New Input/Output
- Non-blocking I/O
- Channels and buffers
- Charsets and charset translation
- TCP/IP connection forwarding
- Java Web Start
- Regular Expressions
- Preferences Library
- Java Secure Socket Extension
- Image I/O
ABOUT THE AUTHOR...
Greg Travis is a consultant and prolific writer based in New York City. He has been a Java programmer since the first day the language was released.

