public final class ByteFormatter extends Object
The methods in this class create no objects.
If a number cannot fit into the requested space the truncateOnOverlow flag controls whether the formatter will attempt to append it using the available length in the output (a la C or Perl style formats). If this flag is set, or if the number cannot fit into space left in the buffer it is 'truncated' and the requested space is filled with a truncation fill character. A TruncationException may be thrown if the truncationThrow flag is set.
This class does not explicitly support separate methods for formatting reals in exponential notation. Real numbers near one are by default formatted in decimal notation while numbers with large (or very negative) exponents are formatted in exponential notation. By setting the limits at which these transitions take place the user can force either exponential or decimal notation.
Modifier and Type | Field and Description |
---|---|
static String |
INFINITY |
static String |
NEGATIVE_INFINITY |
static String |
NOT_A_NUMBER |
Constructor and Description |
---|
ByteFormatter() |
Modifier and Type | Method and Description |
---|---|
int |
format(boolean val,
byte[] array)
Format a boolean into an existing array.
|
int |
format(boolean val,
byte[] array,
int off,
int len)
Format a boolean into an existing array
|
int |
format(double val,
byte[] array)
Format a double into an array.
|
int |
format(double val,
byte[] buf,
int off,
int len)
Format a double into an existing character array.
|
int |
format(float val,
byte[] array)
Format a float into an array.
|
int |
format(float val,
byte[] buf,
int off,
int len)
Format a float into an existing byteacter array.
|
int |
format(int val,
byte[] array)
Format an int into an array.
|
int |
format(int val,
byte[] buf,
int off,
int len)
Format an int into an existing array.
|
int |
format(long val,
byte[] array)
Format a long into an array.
|
int |
format(long val,
byte[] buf,
int off,
int len)
Format a long into an existing array.
|
int |
format(String val,
byte[] array)
Insert a string at the beginning of an array.
|
int |
format(String val,
byte[] array,
int off,
int len)
Insert a String into an existing character array.
|
public static final String NOT_A_NUMBER
public static final String INFINITY
public static final String NEGATIVE_INFINITY
public int format(boolean val, byte[] array)
val
- value to writearray
- the array to fillpublic int format(boolean val, byte[] array, int off, int len)
val
- The boolean to be formattedarray
- The buffer in which to format the data.off
- The starting offset within the buffer.len
- The maximum number of characters to use use in formatting the
number.public int format(double val, byte[] array)
val
- The double to be formatted.array
- The array in which to place the result.public int format(double val, byte[] buf, int off, int len)
This is hard to do exactly right... The JDK code does stuff with rational arithmetic and so forth. We use a much simpler algorithm which may give an answer off in the lowest order bit. Since this is pure Java, it should still be consistent from machine to machine.
Recall that the binary representation of the double is of the form d = 0.bbbbbbbb x 2n where there are up to 53 binary digits in the binary fraction (including the assumed leading 1 bit for normalized numbers). We find a value m such that 10m d is between 253 and 263. This product will be exactly convertible to a long with no loss of precision. Getting the decimal representation for that is trivial (see formatLong). This is a decimal mantissa and we have an exponent (-m). All we have to do is manipulate the decimal point to where we want to see it. Errors can arise due to roundoff in the scaling multiplication, but should be no more than a single bit.
val
- Double to be formattedbuf
- Buffer in which result is to be storedoff
- Offset within bufferlen
- Maximum length of integerpublic int format(float val, byte[] array)
val
- The float to be formatted.array
- The array in which to place the result.public int format(float val, byte[] buf, int off, int len)
This is hard to do exactly right... The JDK code does stuff with rational arithmetic and so forth. We use a much simpler algorithm which may give an answer off in the lowest order bit. Since this is pure Java, it should still be consistent from machine to machine.
Recall that the binary representation of the float is of the form d = 0.bbbbbbbb x 2n where there are up to 24 binary digits in the binary fraction (including the assumed leading 1 bit for normalized numbers). We find a value m such that 10m d is between 224 and 232. This product will be exactly convertible to an int with no loss of precision. Getting the decimal representation for that is trivial (see formatInteger). This is a decimal mantissa and we have an exponent ( -m). All we have to do is manipulate the decimal point to where we want to see it. Errors can arise due to roundoff in the scaling multiplication, but should be very small.
val
- Float to be formattedbuf
- Buffer in which result is to be storedoff
- Offset within bufferlen
- Maximum length of fieldpublic int format(int val, byte[] array)
val
- The int to be formatted.array
- The array in which to place the result.public int format(int val, byte[] buf, int off, int len)
val
- Integer to be formattedbuf
- Buffer in which result is to be storedoff
- Offset within bufferlen
- Maximum length of integerpublic int format(long val, byte[] array)
val
- The long to be formatted.array
- The array in which to place the result.public int format(long val, byte[] buf, int off, int len)
val
- Long to be formattedbuf
- Buffer in which result is to be storedoff
- Offset within bufferlen
- Maximum length of integerpublic int format(String val, byte[] array)
val
- The string to be inserted. A null string will insert len
spaces.array
- The buffer in which to insert the string.public int format(String val, byte[] array, int off, int len)
val
- The string to be inserted. A null string will insert len
spaces.array
- The buffer in which to insert the string.off
- The starting offset to insert the string.len
- The maximum number of characters to insert.Copyright © 1996–2016 nom-tam-fits. All rights reserved.