Sect. 18) How can I clone using serialization?
Java Programmer's FAQ - Part DLook at the code below, submitted by expert programmer John Dumas. It uses serialization to write an object into a byte array, and reads it back to reconstitute a fresh copy. This is a clever hack! import java.io.ByteArrayOutputStream; import java.io.ByteArrayInputStream; import java.io.ObjectOutputStream; import java.io.
Related QuestionsWhat is serialization?
Andy Mc's .NET Framework FAQSerialization is the process of converting an object into a stream of bytes. Deserialization is the opposite process, i.e. creating an object from a stream of bytes. Serialization/Deserialization is mostly used to transport objects (e.g. during remoting), or to persist objects (e.g. to a file or database).
Related QuestionsSect. 18) How do I do I/O redirection using exec()?
Java Programmer's FAQ - Part DThis solution works on Unix platforms using either JDK 1.0.2, or JDK 1.1. The trick is to use an array of Strings for the command line: String[] command = {"/bin/sh", "-c", "/bin/ls > out.dat"}; If you don't do this, and simply use a single string, the shell will see the -c and /bin/ls and ignore everything else after that. It only expects a single argument after the -c. import java.io.*; import java.util.
Related QuestionsSect. 18) What are the naming conventions?
Java Programmer's FAQ - Part DPackage names are guaranteed uniqueness by using the Internet domain name in reverse order: com.javasoft.jag - the "com" or "edu" (etc.) part used to be in upper case, but now lower case is the recommendation. Class and interface names are descriptive nouns, with the first letter of each word capitalized: PolarCoords. Interfaces are often called "something-able", e.g. "Observable", "Runnable", "Sortable".
Related QuestionsSect. 18) How can I set a system property?
Java Programmer's FAQ - Part DJDK 1.2 has System.setProperty( "property", "new value" ); Until then, you can get all the properties, and set just the one you want with code like this: System.getProperties().put("property", "new value" );
Related QuestionsSect. 18) How do I convert a String to an int?
Java Programmer's FAQ - Part DThere are several ways. The most straightforward is: String myString = numString.trim(); int i = Integer.parseInt(myString); long l = Long.parseLong(myString) or String myString = numString.trim(); i = Integer.parseInt(myString,myIntRadix); Note 1: There is a gotcha with parseInt - it will throw a NumberFormatException for String values in the range "80000000" to "ffffffff". You might expect it to interpret them as negative, but it does not. The values have to be "-80000000" .
Related QuestionsSect. 18) How do I convert an int to a string?
Java Programmer's FAQ - Part DTry any of these: String s = String.valueOf(i); or String s = Integer.toString(i); or String s = Integer.toString(i, radix); or // briefer but may result in extra object allocation. String s = "" + i; Note: There are similar classes for Double, Float, Long, etc.
Related QuestionsSect. 18) How do I execute a command in my program?
Java Programmer's FAQ - Part DUse Runtime.getRuntime().exec( myCommandString ) where myCommandString is something like "/full/pathname/command". An applet will need to be signed in order to allow this. If the pathname contains spaces, e.g. "c:\program files\windows\notepad", then enclose it in quotes within the quoted string. Or pre-tokenize them into elements of an array and call exec(String[] cmd) instead of exec(String cmd). From JDK1.3 there are two new overloaded Runtime.exec() methods.
Related QuestionsSect. 18) How do I manipulate bits in Java?
Java Programmer's FAQ - Part DUse bytes, shorts, chars, ints or longs if you need to manipulate no more than 64 bits at once. Use ~ for NOT, & for AND, | for OR, and ^ for XOR. Beware that the precedence for & | and ^ is not intuitive; they have lower precedence than == and !=, so you must write: if ((a & 1) == 1) rather than: if (a & 1 == 1) You can also shift bits with the <<, >> and >>> operators; >> is a signed shift and >>> is an unsigned shift.
Related QuestionsSect. 19) What's the hidden size limitation of String serialization (pre-JDK 1.3)?
Java Programmer's FAQ - Part DThe size of the String, when UTF-encoded, must be < 64Kb So for robust code you have to examine the String once to ensure that it will be less than 64Kb after encoding, and then have the JVM effectively repeat that work in the process of encoding, when you write it to an ObjectOutputStream. A possible workaround that is to strip the string down to "byte[]" and pass it around in RMI that way. The code with this restriction is in DataOutputStream public final void writeUTF(String str) ..
Related QuestionsSect. 18) Why can't I get String mutator methods to work?
Java Programmer's FAQ - Part DCode like this seems to show that the calls don't work! String s = " hello "; s.trim(); s.toUpperCase(); Note again that Strings are immutable. This means that once a String has been initialized, its contents won't change. In the code above, the method calls return a different String with the desired alterations. But this new String is not assigned to anything, so the results are discarded. To see the changes, assign the results of the method call to the original String or to another String.
Related QuestionsSect. 18) How do I print the hex value of an int?
Java Programmer's FAQ - Part DYou can print the hex equivalent of an int with: int i = 0xf1; System.out.println("i is hex " + Integer.toHexString(i) );
Related QuestionsSect. 18) How can you send a function pointer as an argument?
Java Programmer's FAQ - Part DSimple answer: use a "callback". Make the parameter an interface and pass an argument instance that implements that interface. public interface CallShow { public void Show( ); } public class ShowOff implements CallShow { public void Show( ) { .... } public class ShowOff2 implements CallShow { public void Show( ) { .... } public class UseShow { CallShow savecallthis; UseShow( CallShow withthis ) { savecallthis = withthis; } void ReadyToShow( ) { savecallthis.
Related QuestionsSect. 18) So why can't I exec common DOS commands this way (as in 18.8)?
Java Programmer's FAQ - Part DThe reason is that many of the DOS commands are not individual programs, but merely "functions" of command.com. There is no DIR.EXE or COPY.EXE for example. Instead, one executes the command processor (shell) explicitly with a request to perform the built-in command, like so: Runtime.getRuntime().exec("command.com /c dir") for example. On NT, the command interpreter is "cmd.exe", so the statement would be Runtime.getRuntime().
Related QuestionsSect. 18) OK, how do I read the output of a command?
Java Programmer's FAQ - Part Dabove (18.8, 18.9), adjusted like this: BufferedReader pOut= new BufferedReader( new InputStreamReader(p.getInputStream())); try { String s = pOut.readLine(); while (s != null) { System.out.println(s); s = pOut.readLine(); } } catch (IOException e) { } Another possibility is to read chunks of whatever length as they come in: ... p = r.exec(cmd); InputStream is = p.getInputStream(); int len; byte buf[] = new byte[1000]; try { while( (len = is.
Related QuestionsSect. 18) What is the point of creating the temporary reference to this.layoutMgr?
Java Programmer's FAQ - Part DThis code is from the 1.0 AWT, and the programmer was probably pretty skilled. public synchronized void layout() { LayoutManager layoutMgr = this.layoutMgr; if (layoutMgr != null) { layoutMgr.layoutContainer(this); } } The code makes a local copy of a global variable for one or both of two reasons. The first reason is that accessing local variables can be faster than accessing (non final) member variables. It's good for loops or where there are many references in the source.
Related QuestionsSect. 18) What is the difference between "a & b" and "a && b" ?
Java Programmer's FAQ - Part Da & b" takes two boolean operands, or two integer operands. It always evaluates both operands. For booleans, it ANDs both operands together producing a boolean result. For integer types, it bitwise ANDs both operands together, producing a result that is the promoted type of the operands (i.e. long, or int). "|" is the corresponding bitwise OR operation. "^" is the corresponding bitwise XOR operation. a && b" is a "conditional AND" which only takes boolean operands.
Related QuestionsSect. 18) How can I get a globally unique ID in Java?
Java Programmer's FAQ - Part DThe only way in pure Java to create globally unique ids is to set up a server, accessible by all interested parties, which supplies the ids. There are classes in Java which may supply 'probably' unique ids, with varying levels of reliability --- but a dual processor machine with two JVMs running could easily generate duplicate ids. Note that a global server issuing a token (and periodic "are you still using it" messages) is a pretty good way to do cooperative file locking too.
Related QuestionsWhat is a clone?
Perpetuate - Pet DNA and Cell BankingA clone is an identical twin. Clones have the identical genetic makeup (DNA) of their genetic donors. Natural examples of clones in addition to twins include bacteria and yeast; some snail and shrimp species reproduce by cloning.
Related QuestionsWhy clone animals?
Project Idaho - FAQTo increase the impact of the genetics of a specific animal in the overall population. Cloning allows the complete and exact duplication of an individual animal’s genetic make-up. Therefore, if you have a genetically exceptional animal, it may be economically desirable to make genetic copies. In addition, valuable animals that die or become diseased can be duplicated through cloning.
Related QuestionsCan I customise the serialization process?
Andy Mc's .NET Framework FAQYes. XmlSerializer supports a range of attributes that can be used to configure serialization for a particular class. For example, a field or property can be marked with the [XmlIgnore] attribute to exclude it from serialization. Another example is the [XmlElement] attribute, which can be used to specify the XML element name to be used for a particular property or field. Serialization via SoapFormatter/BinaryFormatter can also be controlled to some extent by attributes.
Related QuestionsHow do I clone an iPAQ without using VFAT?
Frequently Answered QuestionsThe bootldr cannot currently create files on a vfat filesystem, although it can update the contents of files and adjust the lengths of files. This makes it somewhat inconvenient to save copies of flash to a raw partition on a CF card. Here is a sequence of commands for saving a copy of flash into the first IDE partition on a CF or PCMCIA card.
Related QuestionsSect. 18) Do I really need to use new String(...) to create a new String?
Java Programmer's FAQ - Part DNo. A String constant such as "" or "hello" is already a String, so there's no need to write code like: String s = new String(""); You can instead write the simpler String s = ""; Note that Strings are immutable (unchangeable), so there is no danger of accidentally modifying a String that is pointed to by another reference.
Related QuestionsDoes the .NET Framework have in-built support for serialization?
Andy Mc's .NET Framework FAQThere are two separate mechanisms provided by the .NET class library - XmlSerializer and SoapFormatter/BinaryFormatter. Microsoft uses XmlSerializer for Web Services, and SoapFormatter/BinaryFormatter for remoting. Both are available for use in your own code. It depends. XmlSerializer has severe limitations such as the requirement that the target class has a parameterless constructor, and only public read/write properties and fields can be serialized.
Related QuestionsWhy do I want serialization in my books?
Fundprinting--About | Frequently Asked Questions (FAQs)Fundprinting.com allows you to add book numbers to the covers of your books and the inside pages. So, say you need 500 books, and you want to start on book no. 201, you can number the covers and pages "Copy No. 201", followed by "Copy No. 202" for the next book, and so on. This will save your organization time by not having to number books by hand.
Related QuestionsWhy no Serialization like in MFC?
Bakery FAQSerialization isn't all that great - it's just a way to save data as a stream. Anybody who has used MFC much knows that you still have to think up schemes so that you know what type and amount of data to expect next in the stream when you read it back. I suggest that you avoid this hackery and just use XML. See the question below.
Related QuestionsWhat is serialization of an Object?
VB.NET FAQ - Page 8Writing the Object to a StreamB) Reading the Object from a StreamC) Adding the Object to a collectionD) None of the above
Related Questions