411 REFERENCE · Wikibooks
J2ME Programming/Connected Limited Device Configuration
Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.
Introduction
Many people confuse the role of CLDC in J2ME application development. It alone is not a framework for application development because you need more than a configuration to produce J2ME applications(J2ME The J2ME Platform http://en.wikibooks.org/wiki/Programming:J2ME:The_J2ME_Platform). You can think of CLDC as the spec that helps define the subset of the J2ME language items such as input/output, math, and etc that the Java Virtual Machine uses as its set of rules in actually runing MIDlets under the Mobile Information Device Profile(MIDP).
Package Structure
We can get a clearer picture of this by observing what each package in the CLDC defines as the J2ME java subset. Although its not clear from the javadocs, Sun Microsystems does not separate MIDP and CLDC javadocs, these are the actual packages of CLDC(cldcapi CLDC API Documentation, V1.0 http://java.sun.com/j2me/docs/pdf/cldcapi.pdf):
CLDC1.0 list of Packages under java.*
java.lang.*
java.io.*
java.util.*
Thus, we have classes that deinfe the java language subset attributes used. How the java language subset definitions for input/output are used. Also, a language definition of the subset of java.util.* from the full java language.
Math Classes(CLDC1.0) in java.lang.* package from J2SE1.3
java.lang.Long
java.lang.Short
java.lang.Integer
Notice when compared to J2SE math we have no floating point(Float class) and no double(Double class).
Utility Classes(CLDC1.0) from J2SE1.3
java.lang.Math
java.util.Random
System Classes(CLDC1.0) in java.lang.* package from J2SE1.3
java.lang.System
java.lang.Object
java.lang.Runtime
java.lang.Thread
java.lang.Throwable
java.lang.String
java.lang.StringBuffer
Data Type Classes(CLDC1.0) in java.lang.* package from J2SE1.3 excluding math
java.lang.Boolean
java.lang.Byte
java.lang.Character
Collection Classes(CLDC1.0) in java.util.* package from J2SE1.3
java.util.Enumeration
java.util.Hashtable(see note in conclusion, from jdk1.1.8 not jse1.3)
java.util.Stack
java.util.Vector(see note in conclusion, from jdk1.1.8 not jse1.3)
Calendar and Time Classes(CLDC1.0) in java.util.* package from J2SE1.3
java.util.Calendar
java.util.Date
java.util.TimeZone
IO Classes(CLDC1.1) excluding GCF in java.io.* package from J2SE1.3
java.io.Writer
java.io.Reader
java.io.ByteArrayInputStream
java.io.ByteArrayOutputStream
java.io.DataInputStream
java.io.DataOutputStream
java.io.InputStream
java.io.OutputStream
java.io.InputStreamWriter
java.io.OuputStreamWriter
java.io.PrintStream
Exception Classes(CLDC1.0) in java.util.* package from J2SE1.3
java.util.EmptyStackException
java.util.NoSuchElementException
Exception Classes(CLDC1.0) in java.io.* package from J2SE1.3
java.io.EOFException
java.io.IOException
java.io.InterruptedException
java.io.UnsupportedEncodingException
java.io.UTFDataFormatException
Error Classes(CLDC1.0) in java.lang.* package from J2SE1.3
java.lang.Error
java.lang.VirtualMachineError
java.lang.OutOfMemoryError
The other clases are mixed in with MIDP in the javadocs, thus I will list the full list of CLDC classes under the javax.microedition.io.* package. The class is the capitalized name at the right sight of the dot ending the package.
CLDC1.0 list of classes under javax.microedition.io.*
javax.microedition.io.InputConnection
javax.microedition.io.Connection
javax.microedition.io.StreamConnection
javax.microedition.io.OutputConnection
javax.microedition.io.Datagram
javax.microedition.io.DatagramConnection
javax.microedition.io.StreamConnectionNotifier
javax.microedition.io.ContentConnection
javax.microedition.io.ConnectionNotFoundException
javax.microedition.io.Connector
The common aspect that sets these classes apart is that they are interfaces defining the capabilities of the input/output connections. The classes in java.io.* define the java language attributes that input/output classes in javax.microedition.io.* use as their rule set.
CLDC1.1 additional classes
java.lang.Float
java.lang.Double
java.lang.Math
GCF, General Connection Framework
In the J2ME platform the J2SE IO is replaced with a smaller General Connection Framework(GCF).
javax.microedition.io GCF Classes from CLDC1.0
javax.microedition.io.InputConnection
javax.microedition.io.Connection
javax.microedition.io.StreamConnection
javax.microedition.io.OutputConnection
javax.microedition.io.DatagramConnection
javax.microedition.io.StreamConnectionNotifier
javax.microedition.io.ContentConnection
javax.microedition.io.HttpConnection
Conclusion
In conclusion, under the subset of java language for CLDC we do not have floating point math, no double, no class loaders, no sockets and no serialization. A smaller IO framework known as GCF is used.
While the javadocs read MID Profile in top right corner the actual Configuration or Profile they belong to is noted down before the class method summary is listed as:
since CLDC1.0 or since MIDP1.0
Note, that not all classes are based on JDK1.3
Classes(CLDC1.0) Based on JDK1.1.8 instead of JDK1.3
java.util.Vector
java.util.Hashtable
These classes were based on JDK1.1.8 to conserve space.
CLDC1.0 Limitations
Unicode Translation to and from reader/writer bytes is limited
Does not support java.util.Properties from J2SE but limited stuff can be acquire as System.getProperty(String key) that starts with the keyword microedition
References
cldcapi CLDC API Documentation, V1.0 http://java.sun.com/j2me/docs/pdf/cldcapi.pdf
KVM White paper J2ME Building Blocks for Mobile Devices White Paper on KVM and the Connected Limited Device Configuration (CLDC) http://java.sun.com/products/cldc/wp/KVMwp.pdf
Trademark Notices
J2ME, Java and all Java-based marks are trademarks or registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries.