23.07.2013 Views

Java IO.pdf - Nguyen Dang Binh

Java IO.pdf - Nguyen Dang Binh

Java IO.pdf - Nguyen Dang Binh

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Java</strong> I/O<br />

rate of the connection is a one bit. Sending between -3 and -25 volts for the same amount of<br />

time is a bit. [2] These bits are grouped into serial data units, SDUs for short. Common SDU<br />

lengths are 8 (used for binary data) and 7 (used for basic ASCII text). Most modern devices<br />

use eight data bits per SDU. However, some older devices use seven, six, or even five data<br />

bits per SDU. Once an SDU is begun, the rest of the SDU follows in close order. However,<br />

there may be gaps of indeterminate length between SDUs.<br />

One of the problems faced by asynchronous serial devices is determining SDU boundaries. If<br />

a modem receives eight data bits, how is it to tell whether that's an entire SDU or the last four<br />

bits of one SDU and the first four bits of another, especially if the connection has some noise<br />

and isn't particularly reliable? To assist with this, each SDU is preceded by a single start bit<br />

that's always 0, and followed by between one and two stop bits. Stop bits last longer than data<br />

bits so they can always be identified.<br />

In addition to the data and the start and stop bits, an SDU may have a parity bit. Parity is a<br />

very simple error detection scheme that can detect (but not correct) single bit errors in an<br />

SDU. There are two basic parity schemes. Even parity adds an extra one bit to the end of the<br />

SDU if there are an even number of one bits in the data. Odd parity adds an extra one bit to<br />

the end of the SDU if there are an odd number of one bits in the data. [3] No parity simply omits<br />

the parity bit. The combination of data bits, parity scheme, and stop bits is abbreviated in<br />

forms like 8N1 or 7E1. 8N1 means a connection uses eight data bits, no parity, and one stop<br />

bit; 7E1 means seven data bits, even parity, and one stop bit. Virtually all modern systems use<br />

8N1.<br />

The baud rate is the number of times per second the state of the communication channel<br />

changes. This is not the same as bits per second. Modern modems send multiple bits per baud.<br />

Most U.S. phone lines, configured primarily for voice calls, have a maximum baud rate of<br />

3200. Modems that send higher bit rates send multiple bits with each baud. A 28,800 bps<br />

modem is a 3200 baud modem with nine states, for example. In fact, a standard 2400 bps<br />

modem is really a 600 baud modem with four states.<br />

The <strong>Java</strong> Comm API lets you set all of these parameters, including baud rate, data bits, stop<br />

bits, and parity. They should all be familiar to anyone who's struggled with modem init strings<br />

and terminal software in the bad old days before the Internet separated connectivity from<br />

content. Four methods in the SerialPort class return the values of these settings. They are:<br />

public abstract int getBaudRate()<br />

public abstract int getDataBits()<br />

public abstract int getStopBits()<br />

public abstract int getParity()<br />

A little surprisingly, you can't set these values independently. Instead, all four values (baud,<br />

data bits, stop bits, and parity) are set at once with the setSerialPortParams() method:<br />

public abstract void setSerialPortParams(int baud, int dataBits, int<br />

stopBits, int parity) throws UnsupportedCommOperationException<br />

2<br />

Sending between 3 and -3 volts is a hardware error.<br />

3<br />

There are two more parity schemes you may encounter in brain-damaged hardware. Mark parity always adds a one bit for the parity; space parity<br />

always adds a zero bit. These convey no useful information and are almost never used.<br />

444

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!