﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;span style="color:#000000"&gt;oh.. nice!&lt;/span&gt;-随笔分类-技术</title><link>http://www.blogjava.net/orangehf/category/42202.html</link><description>&lt;span style="color:#000000"&gt;What the hell is going on?!&lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 18 Dec 2012 11:28:49 GMT</lastBuildDate><pubDate>Tue, 18 Dec 2012 11:28:49 GMT</pubDate><ttl>60</ttl><item><title>Understanding Binary, Decimal and Hexadecimal - A Tutorial</title><link>http://www.blogjava.net/orangehf/archive/2012/12/18/393139.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Tue, 18 Dec 2012 04:56:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2012/12/18/393139.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/393139.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2012/12/18/393139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/393139.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/393139.html</trackback:ping><description><![CDATA[<h2><br /><span style="font-weight: normal; font-size: 12pt; ">Repost from&nbsp;<a href="http://east82.com/howto/ip_addressing/bin_dec_hex.htm"><span style="font-size: 12pt; ">http://east82.com/howto/ip_addressing/bin_dec_hex.htm</span></a>&nbsp;</span><br /><br /><img alt="BIND DNS Ubuntu" height="73" src="http://east82.com/images/check.png" width="72" style="vertical-align: middle; " />Understanding Binary, Decimal and Hexadecimal - A Tutorial</h2><p style="font-family: Verdana; margin-left: 80px; font-size: small; line-height: normal; ">"<em>There are 10 kinds of people in the world ...those who understand binary and those who do not"</em></p><h3>A primer in numbering systems</h3><p style="font-family: Verdana; font-size: small; line-height: normal; ">There are four basic numbering systems that are used in the human, networking, and computer science worlds. Binary, octal, decimal and hexadecimal. Decimal, the numbering system we are most familiar with has a base, or radix, of 10 and to us this is natural. Why 10? Most of us have 10 fingers and that is how it was selected as our numbering system; it's as simple as that. The Yuki people of California on the other hand (pun intended) use an octal numbering system, counting the spaces between their fingers and not the fingers themselves. Pretty cool, huh?</p><p style="font-family: Verdana; font-size: small; line-height: normal; ">The other systems widely in use in the networking and computer science world are binary, octal and hexadecimal (See table below). In this tutorial we'll concern ourselves only with binary, decimal and hexadecimal, ignoring octal altogether. As a side note, one use of octal numbering is with Linux and UNIX systems to set file permissions using the chmod command.<br /><img alt="Binary Octal Decimal Hexadecimal numbering systems" height="200" src="http://east82.com/howto/ip_addressing/images/number_systems.png" width="600" /></p><h3>It's all just ones and zeros - bits and nibbles and bytes oh my!</h3><p style="font-family: Verdana; font-size: small; line-height: normal; ">Yes, we're talking binary here. I start here by asking that you don't think of a binary number as being a just series of 1's and 0's, such as 01000001 (65 decimal), but rather as a valid numbering system. So, why binary and not decimal? Take our previous example of 01000001. It's really a sort of computer Morse code, but instead of dots and dashes, it's the presence or absence of state, on or off; whether it be electrical pulses on an Cat5 cable or the state of transistors within a CPU or memory stick. Individually a bit, that is a 1 or 0, is pretty useless. However, put them together in a byte (8 bits) for example, then you have something. With our previous example, the byte 01000001 represents the character 'A'. With the computer's ability to process and transmit millions of bytes in miliseconds it can give us letters, words, pictures, music, videos and oodles of other things almost instantly. No matter what we type or create via keyboard or mouse, eventually it all gets translated into a numerical series of 1's and 0's to represent our intent. So, you see it IS all just 1's and 0's! Oh, I almost forgot ...a nibble is half a byte, 4 bits.</p><h3>Thinking in binary</h3><p style="font-family: Verdana; font-size: small; line-height: normal; ">With the decimal numbering system we have 10 digits to work with, 0 thru 9 and when we count we start at 0, then 1, then 2 and so on until we reach 9. Then what? Well, we've run out of digits. So, we start again at 0, but we place a 1 to the left giving us 10 (ten). And once the 1's and 10's columns reach 9 and 9 (99) they&nbsp; both flip, giving us 100. Same thing goes with binary except we only have 2 digits to work with, 1 and 0.</p><p style="font-family: Verdana; font-size: small; line-height: normal; ">The principal is the same we start at 0 then 1, then ...well, we've run out of digits haven't we? So, we flip that 1 to 0 and place a 1 to the left giving us 10 (two). Increment by 1 again and we have 11 (three) and once again they both flip and we move into a new column giving us 100 (four). This is probably not so bad for small numbers, but once you get past 8 or so binary digits it becomes unmanageable. I mean what does 10011100 equate to in human terms? Don't even mention that binary numbers are unwieldy; 3,000 is 101110111000 in binary ...geez! So, while it&nbsp;<em>is</em>&nbsp;true that we need to think in binary, we can represent these binary numbers in a more human friendly form. Anyone say decimal? Fortunately we have the ability (and absolute need) to convert between the two.&nbsp;</p><h3>Converting binary to decimal</h3><p style="font-family: Verdana; font-size: small; line-height: normal; ">For this section I'll start by examining and explaining the table below.<br /><img alt="Binary byte decimal table" height="112" src="http://east82.com/howto/ip_addressing/images/binary_table.png" width="625" /></p><ul style="font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; "><li><p style="font-family: Verdana; ">First thing&nbsp; to take note of is that there are 8 individual bits giving us a byte. When working with IP addresses, networking folks refer to this as an octet. Obviously, binary numbers can be larger than a simple byte. However, the byte is the most basic representation of data and as such, for the most part, we'll stay at the byte level.</p></li><li><p style="font-family: Verdana; ">The 'Bit Set' row is for our binary digits, either 0 or 1. Here they are all 1.</p></li><li><p style="font-family: Verdana; ">The 'Exponent Value' row is how we arrive mathematically at the 'Decimal Value' row. An exponential value such as 2<sup>3</sup>&nbsp;means 2 x 2 x 2 = 8. By the way, any number with an exponent of 0 ALWAYS equates to 1 (2<sup>0&nbsp;</sup>= 1 and 400<sup>0</sup>&nbsp;also = 1).&nbsp;&nbsp;&nbsp;&nbsp;</p></li><li><p style="font-family: Verdana; ">The 'Decimal Value' row represents<em>&nbsp;positionally</em>&nbsp;the decimal value of the binary digit in question. It's imperative that you&nbsp;<strong>commit this row to memory</strong>. Practice by writing it down over and over 'till its part of your DNA :-)</p></li></ul><div style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; "><span style="font-size: medium; ">128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span></div><ul style="font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; "><li><p style="font-family: Verdana; ">The labels 'MSB' and 'LSB' stand for 'Most Significant Bit' and 'Least Significant Bit' respectively. This lets us know which end of the binary number we are talking about. For example, if I had a binary number of 11010101 and I say 'Starting at bit 1' ...that might be confusing. However, if I say 'Starting with the bit at LSB 1'. Well, you get the picture.</p></li></ul><p style="font-family: Verdana; font-size: small; line-height: normal; ">Previously we talked about thinking in binary means knowing how to count in binary and that still holds valid, but now, in order to convert between the two, we are going to only concern ourselves with the position of each binary digit as it relates to its decimal equivalent. What?? OK, take for example the binary number 00001010. Referring to the table above just add the positional decimal equivalents where the 1's occur. So, 0000<strong>1</strong>0<strong>1</strong>0 means 128 (no), 64 (no), 32 (no), 16 (no), 8 (<strong>yes</strong>), 4 (no), 2 (<strong>yes</strong>) 1 (no). Given that, we see that 8 + 2 =10. In other words 00001010 binary is 10 decimal. Here are a few more examples.</p><ul style="font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; "><li><p style="font-family: Verdana; ">11000000 - 128 + 64 =&nbsp;<strong>192</strong></p></li><li><p style="font-family: Verdana; ">00000001 - =&nbsp;<strong>1</strong></p></li><li><p style="font-family: Verdana; ">00110011 - 32 + 16 + 2 + 1 =&nbsp;<strong>51</strong></p></li><li><p style="font-family: Verdana; ">11011011 - 128 + 64 + 16 + 8 + 2 + 1 =<strong>&nbsp;219</strong></p></li><li><p style="font-family: Verdana; ">00000000 - =&nbsp;<strong>0</strong></p></li><li><p style="font-family: Verdana; ">11111111 - 128 + 64 + 32 +16 + 8 + 4 + 2 + 1 =<strong>&nbsp;255</strong></p></li></ul><p style="font-family: Verdana; font-size: small; line-height: normal; ">If you encounter a binary number less than a byte such as 11001 (25 decimal), just pad the missing binary digits with 0's, making the number 00011001, a complete byte. Also, if you are presented with a binary number larger than a byte then double the decimal number with each subsequent binary position to the left. See table below. Later, when we work with subnetting, we'll use these larger values.&nbsp;<img alt="Expanded binary to decimal table" height="204" src="http://east82.com/howto/ip_addressing/images/expanded_binary_table.png" width="625" /></p><p style="font-family: Verdana; font-size: small; line-height: normal; ">At this point you should be comfortable with converting binary to decimal. Now let's go the other way, decimal to binary. I'll show you two different methods. Use the one that best works for you.</p><h4>Method 1 - Process of Elimination</h4><p style="font-family: Verdana; font-size: small; line-height: normal; ">This method is pretty straight forward. The first thing to do is write down the decimal value row previously covered.<br /></p><div style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; "><span style="font-size: medium; ">128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span></div><p style="font-family: Verdana; font-size: small; line-height: normal; ">Next, somewhere off to the side, write down your decimal number. With a byte, or octet, the smallest number is 0 and the largest 255, so your number must be within this range. Next, follow the procedure below:</p><p style="font-family: Verdana; font-size: small; line-height: normal; ">Compare the decimal number with the MSB (128). If your number is larger than or equal to 128 then place a 1 under the 128 column, subtract 128 from your number and move to the next position (64). However, if your number is less than 128 then place a 0 under the 128 column and move to the next number (64) without subtracting.</p><p style="font-family: Verdana; font-size: small; line-height: normal; ">Repeat the above process with 64, 32, 16 etc. until your original number is reduced to zero. If you reach zero before reaching the LSB (1) fill in the remaining columns with 0's. below are a few examples:<br /><img alt="Decimal to binary conversion examples" height="445" src="http://east82.com/howto/ip_addressing/images/decimal_to_binary_01.png" width="600" /></p><h4>Method 2 - Divide and Conquer</h4><p style="font-family: Verdana; font-size: small; line-height: normal; ">This method has you repeatedly dividing a decimal number by 2 and saving the remainder, either 1 or 0, as a binary digit. Keep doing this until, again, your original number has been reduced to 0. It's not as confusing as it sounds. Let's walk through an example:<br /><img alt="Decimal to binary conversion division example" height="528" src="http://east82.com/howto/ip_addressing/images/decimal_to_binary_02.png" width="589" />Refer to the example above. Given the decimal number 41 and the divide-and-conquer method, we derive its binary equivalent with the following logic:</p><ul style="font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; "><li><p style="font-family: Verdana; ">41 divided by 2 is 20, remainder&nbsp;<span style="color: #800000; "><strong>1</strong></span>. Place a 1 in the remainder column and 20 in the division column. This is the LSB and will be the rightmost binary digit.</p></li><li><p style="font-family: Verdana; ">20 divided by 2 is 10, remainder<strong>&nbsp;0</strong>. Place a 0 in the remainder column and 10 in the division column.</p></li><li><p style="font-family: Verdana; ">10 divided by 2 is 5, remainder<strong>&nbsp;0</strong>. Place a 0 in the remainder column and 5 in the division column.</p></li><li><p style="font-family: Verdana; ">5 divided by 2 is 2, remainder&nbsp;<strong>1</strong>. Place a 1 in the remainder column and 2 in the division column.</p></li><li><p style="font-family: Verdana; ">2 divided by 2 is 1, remainder&nbsp;<strong>0</strong>. Place a 0 in the remainder column and 1 in the division column.</p></li><li><p style="font-family: Verdana; ">1 divided by 2 is 0, remainder&nbsp;<strong>1</strong>. Place a 1 in the remainder column and we're done ...</p></li></ul><p style="font-family: Verdana; font-size: small; line-height: normal; ">... well almost. Our solution came out to be only 6 binary digits long. Since we are working with bytes, just pad the left with 0's until the binary number is 8 digits in length. One more thing. Your last operation will<strong>&nbsp;always</strong>&nbsp;be 1/2 = 0, remainder 1. Here a couple more examples:<br /><img alt="Decimal to binary conversion" height="551" src="http://east82.com/howto/ip_addressing/images/decimal_to_binary_03.png" width="600" /><br /><strong>&nbsp;</strong></p><h4>Binary and decimal numbers larger than a byte</h4><p style="font-family: Verdana; font-size: small; line-height: normal; ">At times you might have a binary or decimal that is larger than a byte. Don't panic. All you need to do is extend the binary byte row to the left, doubling as you go along.</p><div style="text-align: center; font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; "><span style="font-size: medium; ">128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</span></div><p style="font-family: Verdana; font-size: small; line-height: normal; ">now becomes the following if we have a 12 bit binary number:</p><div style="text-align: center; font-size: medium; font-family: Arial, Helvetica, sans-serif; line-height: normal; ">2048&nbsp;&nbsp;&nbsp;&nbsp; 1024&nbsp;&nbsp;&nbsp;&nbsp; 512&nbsp;&nbsp;&nbsp;&nbsp; 256&nbsp;&nbsp;&nbsp;&nbsp; 128&nbsp;&nbsp;&nbsp;&nbsp; 64&nbsp;&nbsp;&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp;&nbsp; 16&nbsp;&nbsp;&nbsp;&nbsp; 8&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp; 1</div><p style="font-family: Verdana; font-size: small; line-height: normal; ">Here is a sample conversion from binary to decimal using process of elimination:<br /><img alt="Large decimal number to binary conversion" height="357" src="http://east82.com/howto/ip_addressing/images/large_decimal_to_binary_conversion.png" width="600" /></p><h3>Moving on to hexadecimal</h3><p style="font-family: Verdana; font-size: small; line-height: normal; ">Just when you got your head around binary and decimal, along comes&nbsp;hexadecimal, hex for short. Before, I mentioned that everything in the computing and networking arena is nothing more that 1's and 0's and that axiom remains unchanged. We now know how to convert back and forth between binary (what the computer speaks) and decimal (what we speak), so why do we even need hex? Besides being an efficient numbering system, hexadecimal is widely used to represent to us humans the 1's and 0's that traverse circuits and wires. A few examples where hex numbers are used are colors, memory references, IPv6 addresses and MAC addresses. Let's explore this a little more in detail.</p><p style="font-family: Verdana; font-size: small; line-height: normal; ">A binary byte is exactly eight digits long, e.g. 00101110 and a hex byte number is exactly two digits in length, e.g. 6A. A decimal byte on the other hand is anywhere between one and three digits long, e.g. 4, 64 or 233. Yes, you&nbsp;<em>could</em>&nbsp;pad these with 0's making 004, 064 and 233, but this is still not as efficient or as practical as hex. (as we'll see when we start converting hex and binary numbers). Download my<a href="http://east82.com/howto/ip_addressing/docs/ASCII%20Table.pdf" target="_blank" style="color: #446699; ">extended ASCII table</a>; it will help with the following illustration and serve as a useful refernece for your studies:<br /><img alt="Memory dump" height="349" src="http://east82.com/howto/ip_addressing/images/memory_dump.png" width="600" /><br />&nbsp;This screenshot is a memory dump of my computer. Imagine if those numbers were represented in binary!</p><p style="font-family: Verdana; font-size: small; line-height: normal; ">Let's get on with it.</p><h4>What the hex are you talking about?</h4><p style="font-family: Verdana; font-size: small; line-height: normal; ">Below is a hex table with decimal equivalents:<br /><img alt="Hexadecimal decimal table" height="79" src="http://east82.com/howto/ip_addressing/images/hex_decimal_table.png" width="600" /></p><p style="font-family: Verdana; font-size: small; line-height: normal; ">With hex, the first 10 digits, 0 thru 9, are the same as decimal. However, 10 thru 15 decimal are represented as a single hex digit A thru F. The number 5 in decimal is 5 in hex and the number 13 in decimal is D in hex. What happens when we reach F (15 decimal) and need to increment by 1 is that, just like with all other numbering systems, we flip that to 0 and place a one to the left.&nbsp;<strong>0xF + 0x1 = 0x10</strong>. What is this 0x business? Placing 0x in front of a hex number is the typical way to indicate it's really hex. It makes it clear that 11 (decimal) and 0x11 (hex) are two different numbers entirely. So, from here on out I'll use the 0x to indicate hexadecimal numbers. Sometimes you'll see the hex numbers 0xA thru 0xF written in lower case (0xa thru 0xf). There's nothing wrong with that and it does not change the numerical value of the number in question. I use caps in this how-to.</p><h4>Binary to hex - nibbles and bits</h4><p style="font-family: Verdana; font-size: small; line-height: normal; ">To convert a binary byte to hex byte, first split the binary number into two nibbles, treating them as separate numbers, and then compute the hex equivalent for each half. Finally, concatenate the two hex numbers into a single solution. This works perfectly because a nibble has a value from 0 thru 15 or 0x0 thru 0xF.<br /><img alt="Binary hex range" height="151" src="http://east82.com/howto/ip_addressing/images/binary_hex_range.png" width="366" /></p><p style="font-family: Verdana; font-size: small; line-height: normal; ">Here's some examples:<br /><img alt="Binary to hex conversion examples" height="207" src="http://east82.com/howto/ip_addressing/images/binary_to_hex_conversion.png" width="600" /><br /></p><h4>Binary to hex - bits and nibbles</h4><p style="font-family: Verdana; font-size: small; line-height: normal; ">The conversion process from hex to binary is not much different, we just reverse the process. A picture is worth a thousand words. Here's 4,000 of them.<br /><img alt="Hexadecimal to binary conversion examples" height="204" src="http://east82.com/howto/ip_addressing/images/hex_to_binary_conversion.png" width="600" /></p><p style="font-family: Verdana; font-size: small; line-height: normal; ">Once in a while you may find yourself presented with a binary or hex number larger than a byte. The methods are the same, just expanded. If you have a binary number to convert then you may have to pad the MSB with 0's in order to have a binary number that falls on nibble boundaries, multiples of 4. For example, the binary number 1001100101 won't convert correctly, because it's ten digits in length. Add two 0's making the number&nbsp;<strong>00</strong>1001100101. A few illustrations:<img alt="Large binary and hex conversions" height="278" src="http://east82.com/howto/ip_addressing/images/large_binary_hex_conversions.png" width="600" /></p><h4>Decimal to hex - tens to sixteens</h4><p style="font-family: Verdana; font-size: small; line-height: normal; ">Up to now we've been able to accomplish our conversions armed with only paper and pencil. It's time to break out your calculator for converting decimal to hex and vice versa. Take&nbsp; Look at these decimal / hex equivalents:<br />16 = 0x10&nbsp; |&nbsp; 34 = 0x22&nbsp; |&nbsp; 214 = 0xD6&nbsp; |&nbsp; 175 = 0xAF<br />Here's how we get from the decimal value on the left of the = sign to its hexadecimal equivalent on the right. Remember the divide and conquer method we used for converting decimal to binary? We are going to use the same method except that we are going to be dividing by 16 rather than 2. The upside is that the process is a lot shorter.<br /><img alt="decimal to hex conversion example" height="191" src="http://east82.com/howto/ip_addressing/images/decimal_to_hex_01.png" width="600" /></p><ul style="font-family: Arial, Helvetica, sans-serif; font-size: small; line-height: normal; "><li><p style="font-family: Verdana; ">225 divided by 16 is 14, remainder&nbsp;<strong><span style="color: #800000; ">0x1</span></strong>. Place a 0x1 in the remainder column and 14 in the division column. This is our rightmost hex digit.</p></li><li><p style="font-family: Verdana; ">14 divided by 16 is 0, remainder<strong>&nbsp;14</strong>. Since we are converting to hex we use&nbsp;<strong>0xE</strong>. Place 0xE in the remainder column and we're done.</p></li><li><p style="font-family: Verdana; ">If you have a small decimal number such as 12, you'll have your answer on the first divide. 12 / 16 = 0, remainder 12 or 0xC. Place a leading 0 in from of the C to keep things uniform. So, the answer would be 0x0C</p></li></ul><p style="font-family: Verdana; font-size: small; line-height: normal; ">How easy is that? Here are a few more:<br /><img alt="Decimal to hexadecimal convert examples" height="310" src="http://east82.com/howto/ip_addressing/images/decimal_to_hex_02.png" width="600" /><br /></p><p style="font-family: Verdana; font-size: small; line-height: normal; ">It's no different with numbers larger than a byte:<br /><img alt="Decimal to hexadecimal conversion" height="208" src="http://east82.com/howto/ip_addressing/images/decimal_to_hex_03.png" width="600" /></p><h4>Hex to decimal - sixteens to tens</h4><p style="font-family: Verdana; font-size: small; line-height: normal; ">Whew! Nearly done. This is our last number conversion segment, hexadecimal to decimal. With a hex number each position represents a power of 16 and what we do is calculate each position's decimal equivalent and then add them all up. We are going to use a large hex number to illustrate this concept. Given the hex number 0xA59C we find its decimal equivalent with the following logic.<br />(10 x 16<sup>3</sup>) + (5 x 16<sup>2</sup>) + (9 x 16<sup>1</sup>) + (12 x 16<sup>0</sup>) = 43,296. Here's how it breaks down:<br /><img alt="Hexidecimal to decimal conversion example" height="315" src="http://east82.com/howto/ip_addressing/images/hex_to_decimal_conversion.png" width="600" /></p><p style="font-family: Verdana; font-size: small; line-height: normal; ">...And a few more:<br /><img alt="Hexadecimal to decimal conversion examples" height="354" src="http://east82.com/howto/ip_addressing/images/hex_to_decimal_conversion_01.png" width="600" /></p><p style="font-family: Verdana; font-size: small; line-height: normal; ">I encourage you to practice, practice, practice. Download&nbsp;<a href="http://east82.com/howto/ip_addressing/docs/Conversion_Worksheet.pdf" target="_blank" style="color: #446699; ">this worksheet</a>&nbsp;to work thru various conversion exercises.</p><p style="font-family: Verdana; font-size: small; line-height: normal; ">Parting shot - If you are an aspiring network or systems admin then make sure you understand without question binary and decimal conversion through and through.</p><p style="font-family: Verdana; font-size: small; line-height: normal; "><em><strong>Coming soon - Part II Understanding IP addresses, subnet masks and subnetting.</strong></em></p><p style="font-family: Verdana; font-size: small; line-height: normal; "><strong><span style="font-family: 'Courier New', Courier, monospace; font-size: medium; ">./Robert</span></strong></p><img src ="http://www.blogjava.net/orangehf/aggbug/393139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2012-12-18 12:56 <a href="http://www.blogjava.net/orangehf/archive/2012/12/18/393139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell之“&gt;/dev/null 2&gt;&amp;1”</title><link>http://www.blogjava.net/orangehf/archive/2011/12/01/365262.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Thu, 01 Dec 2011 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/12/01/365262.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/365262.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/12/01/365262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/365262.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/365262.html</trackback:ping><description><![CDATA[<div><font size="2" face="Tahoma">shell中可能经常能看到：&gt;/dev/null 2&gt;&amp;1</font></div>
<div><font size="2" face="Tahoma">命令的结果可以通过%&gt;的形式来定义输出</font></div>
<div><font size="2" face="Tahoma">分解这个组合：&#8220;&gt;/dev/null 2&gt;&amp;1&#8221; 为五部分。</font></div>
<div><font color="#ff6600" size="2" face="Tahoma">1：&gt; 代表重定向到哪里，例如：echo "123" &gt; /home/123.txt<br />2：/dev/null 代表空设备文件<br />3：2&gt; 表示stderr标准错误<br />4：&amp; 表示等同于的意思，2&gt;&amp;1，表示2的输出重定向等同于1<br />5：1 表示stdout标准输出，系统默认值是1，所以"&gt;/dev/null"等同于 "1&gt;/dev/null"</font></div>
<div><font size="2" face="Tahoma">因此，&gt;/dev/null 2&gt;&amp;1也可以写成&#8220;1&gt; /dev/null 2&gt; &amp;1&#8221;</font></div>
<div><font size="2" face="Tahoma">那么本文标题的语句执行过程为：<br />1&gt;/dev/null ：首先表示标准输出重定向到空设备文件，也就是不输出任何信息到终端，说白了就是不显示任何信息。<br />2&gt;&amp;1 ：接着，标准错误输出重定向 到 标准输出，因为之前标准输出已经重定向到了空设备文件，所以标准错误输出也重定向到空设备文件。</font></div>
<div><font size="2" face="Tahoma">说清楚了吗，大家理解下吧！</font></div>
<div><font color="#ff6600" size="2" face="Tahoma">顺便对比述说下这么用的好处！</font></div>
<div><font size="2" face="Tahoma">&nbsp;&nbsp; 最常用的方式有：</font></div>
<div><font color="#ff0000" size="2" face="Tahoma">command &gt; file 2&gt;file&nbsp; 与command &gt; file 2&gt;&amp;1</font></div>
<div><font size="2" face="Tahoma">它们&nbsp;有什么不同的地方吗？</font></div>
<div><br /><font size="2" face="Tahoma">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先command &gt; file 2&gt;file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command&nbsp; &gt; file 2&gt;file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而command &gt;file 2&gt;&amp;1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会command &gt; file 2&gt;&amp;1 这样的写法。</font></div><br /><br />转自：<a href="http://ppp1013.blog.51cto.com/927700/271043">http://ppp1013.blog.51cto.com/927700/271043</a><img src ="http://www.blogjava.net/orangehf/aggbug/365262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-12-01 09:54 <a href="http://www.blogjava.net/orangehf/archive/2011/12/01/365262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iostat来对linux硬盘IO性能进行了解</title><link>http://www.blogjava.net/orangehf/archive/2011/11/02/362534.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Wed, 02 Nov 2011 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/11/02/362534.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/362534.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/11/02/362534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/362534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/362534.html</trackback:ping><description><![CDATA[<p>转自: <a title="iostat来对linux硬盘IO性能进行了解" href="http://www.php-oa.com/2009/02/03/iostat.html">http://www.php-oa.com/2009/02/03/iostat.html</a> 
<p>&nbsp;以前一直不太会用这个参数。现在认真研究了一下iostat，因为刚好有台重要的服务器压力高,所以放上来分析一下.下面这台就是IO有压力过大的服务器</p>
<p>&nbsp;</p>
<div>
<div id="highlighter_972160" class="syntaxhighlighter nogutter  bash ie">
<div class="toolbar"><span><a class="toolbar_item command_help help" href="http://www.php-oa.com/2009/02/03/iostat.html#">?</a></span></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash plain">$iostat -x 1 </code></div>
<div class="line number2 index1 alt1"><code class="bash plain">Linux 2.6.33-fukai (fukai-laptop)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _i686_&nbsp;&nbsp;&nbsp; (2 CPU) </code></div>
<div class="line number3 index2 alt2"><code class="bash plain">avg-cpu:&nbsp; %user&nbsp;&nbsp; %</code><code class="bash functions">nice</code> <code class="bash plain">%system %iowait&nbsp; %steal&nbsp;&nbsp; %idle </code></div>
<div class="line number4 index3 alt1"><code class="bash spaces">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code><code class="bash plain">5.47&nbsp;&nbsp;&nbsp; 0.50&nbsp;&nbsp;&nbsp; 8.96&nbsp;&nbsp; 48.26&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp; 36.82 </code></div>
<div class="line number5 index4 alt2"><code class="bash spaces">&nbsp;</code>&nbsp;</div>
<div class="line number6 index5 alt1"><code class="bash plain">Device:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rrqm</code><code class="bash plain">/s</code>&nbsp;&nbsp; <code class="bash plain">wrqm</code><code class="bash plain">/s</code>&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">r</code><code class="bash plain">/s</code>&nbsp;&nbsp;&nbsp;&nbsp; <code class="bash plain">w</code><code class="bash plain">/s</code>&nbsp;&nbsp; <code class="bash plain">rsec</code><code class="bash plain">/s</code>&nbsp;&nbsp; <code class="bash plain">wsec</code><code class="bash plain">/s</code> <code class="bash plain">avgrq-sz avgqu-sz&nbsp;&nbsp; await&nbsp; svctm&nbsp; %util </code></div>
<div class="line number7 index6 alt2"><code class="bash plain">sda&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.00&nbsp;&nbsp; 273.00&nbsp;&nbsp; 99.00&nbsp;&nbsp;&nbsp; 7.00&nbsp; 2240.00&nbsp; 2240.00&nbsp;&nbsp;&nbsp; 42.26&nbsp;&nbsp;&nbsp;&nbsp; 1.12&nbsp;&nbsp; 10.57&nbsp;&nbsp; 7.96&nbsp; 84.40 </code></div>
<div class="line number8 index7 alt1"><code class="bash plain">sdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp;&nbsp;&nbsp;&nbsp; 4.00&nbsp;&nbsp;&nbsp; 0.00&nbsp; 350.00&nbsp;&nbsp;&nbsp;&nbsp; 0.00&nbsp; 2068.00&nbsp;&nbsp;&nbsp;&nbsp; 5.91&nbsp;&nbsp;&nbsp;&nbsp; 0.55&nbsp;&nbsp;&nbsp; 1.58&nbsp;&nbsp; 0.54&nbsp; 18.80</code></div></div></td></tr></tbody></table></div></div>
<p><strong>rrqm/s:</strong>&nbsp;&nbsp; 每秒进行 merge 的读操作数目（当系统调用需要读取数据的时候，VFS将请求发到各个FS，如果FS发现不同的读取请求读取的是相同Block的数据，FS会将这个请求合并Merge）。即 delta(rmerge)/s<br /><strong>wrqm/s:</strong>&nbsp; 每秒进行 merge 的写操作数目。即 delta(wmerge)/s<br /><strong>r/s:</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每秒完成的读 I/O 设备次数。即 delta(rio)/s<br /><strong>w/s:</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每秒完成的写 I/O 设备次数。即 delta(wio)/s<br /><strong>rsec/s:</strong>&nbsp;&nbsp;&nbsp; 每秒读扇区数。即 delta(rsect)/s<br /><strong>wsec/s:&nbsp; </strong>每秒写扇区数。即 delta(wsect)/s<br /><strong>rkB/s: &nbsp;</strong> &nbsp;&nbsp; 每秒读K字节数。是 rsect/s 的一半，因为每扇区大小为512字节。(需要计算)<br /><strong>wkB/s:</strong>&nbsp;&nbsp;&nbsp; 每秒写K字节数。是 wsect/s 的一半。(需要计算)<br /><strong>avgrq-sz: </strong>平均每次设备I/O操作的数据大小 (扇区)。delta(rsect+wsect)/delta(rio+wio)<br /><strong>avgqu-sz:</strong> 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。<br /><strong>await:</strong>&nbsp;&nbsp;&nbsp; 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)<br /><strong>svctm:&nbsp;&nbsp; </strong>平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)<br /><strong>%util:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </strong>一秒中有百分之多少的时间用于 I/O 操作，或者说一秒中有多少时间 I/O 队列是非空的。即 delta(use)/s/1000 (因为use的单位为毫秒)</p>
<p><strong>如果 %util 接近 100%，说明产生的I/O请求太多，I/O系统已经满负荷，该磁盘<br />可能存在瓶颈。<br />idle小于70% IO压力就较大了,一般读取速度有较多的wait.</strong><br /><strong>同时可以结合vmstat 查看查看b参数(<font size="2" face="verdana, arial, helvetica">等待资源的进程数</font>)和wa参数(<font size="2" face="verdana, arial, helvetica">IO等待所占用的CPU时间的百分比,高过30%时IO压力高</font>)</strong><br /><strong>另外 await 的参数也要多和 svctm 来参考。差的过高就一定有 IO 的问题。<br />avgqu-sz 也是个做 IO 调优时需要注意的地方，这个就是直接每次操作的数据的大小，如果次数多，但数据拿的小的话，其实 IO 也会很小.如果数据拿的大，才IO 的数据会高。也可以通过 avgqu-sz &#215; ( r/s or w/s ) = rsec/s or wsec/s.也就是讲，读定速度是这个来决定的。</strong></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>另外还可以参考</strong><br />svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了)，svctm 的大小一般和磁盘性能有关，CPU/内存的负荷也会对其有影响，请求过多也会间接导致 svctm 的增加。await 的大小一般取决于服务时间(svctm) 以及 I/O 队列的长度和 I/O 请求的发出模式。如果 svctm 比较接近 await，说明 I/O 几乎没有等待时间；如果 await 远大于 svctm，说明 I/O 队列太长，应用得到的响应时间变慢，如果响应时间超过了用户可以容许的范围，这时可以考虑更换更快的磁盘，调整内核 elevator 算法，优化应用，或者升级 CPU。<br />队列长度(avgqu-sz)也可作为衡量系统 I/O 负荷的指标，但由于 avgqu-sz 是按照单位时间的平均值，所以不能反映瞬间的 I/O 洪水。</p>
<p><strong><br />&nbsp; 别人一个不错的例子.(I/O 系统 vs. 超市排队)</strong></p>
<p>举一个例子，我们在超市排队 checkout 时，怎么决定该去哪个交款台呢? 首当是看排的队人数，5个人总比20人要快吧? 除了数人头，我们也常常看看前面人购买的东西多少，如果前面有个采购了一星期食品的大妈，那么可以考虑换个队排了。还有就是收银员的速度了，如果碰上了连 钱都点不清楚的新手，那就有的等了。另外，时机也很重要，可能 5 分钟前还人满为患的收款台，现在已是人去楼空，这时候交款可是很爽啊，当然，前提是那过去的 5 分钟里所做的事情比排队要有意义 (不过我还没发现什么事情比排队还无聊的)。</p>
<p>I/O 系统也和超市排队有很多类似之处:</p>
<p>r/s+w/s 类似于交款人的总数<br />平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数<br />平均服务时间(svctm)类似于收银员的收款速度<br />平均等待时间(await)类似于平均每人的等待时间<br />平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少<br />I/O 操作率 (%util)类似于收款台前有人排队的时间比例。</p>
<p>我们可以根据这些数据分析出 I/O 请求的模式，以及 I/O 的速度和响应时间。</p>
<p><strong>下面是别人写的这个参数输出的分析</strong></p>
<div>
<div id="highlighter_536534" class="syntaxhighlighter nogutter  bash ie">
<div class="toolbar"><span><a class="toolbar_item command_help help" href="http://www.php-oa.com/2009/02/03/iostat.html#">?</a></span></div>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="code">
<div class="container">
<div class="line number1 index0 alt2"><code class="bash comments"># iostat -x 1 </code></div>
<div class="line number2 index1 alt1"><code class="bash plain">avg-cpu: %user %</code><code class="bash functions">nice</code> <code class="bash plain">%sys %idle </code></div>
<div class="line number3 index2 alt2"><code class="bash plain">16.24 0.00 4.31 79.44 </code></div>
<div class="line number4 index3 alt1"><code class="bash plain">Device: rrqm</code><code class="bash plain">/s</code> <code class="bash plain">wrqm</code><code class="bash plain">/s</code> <code class="bash plain">r</code><code class="bash plain">/s</code> <code class="bash plain">w</code><code class="bash plain">/s</code> <code class="bash plain">rsec</code><code class="bash plain">/s</code> <code class="bash plain">wsec</code><code class="bash plain">/s</code> <code class="bash plain">rkB</code><code class="bash plain">/s</code> <code class="bash plain">wkB</code><code class="bash plain">/s</code> <code class="bash plain">avgrq-sz avgqu-sz await svctm %util </code></div>
<div class="line number5 index4 alt2"><code class="bash plain">/dev/cciss/c0d0</code></div>
<div class="line number6 index5 alt1"><code class="bash plain">0.00 44.90 1.02 27.55 8.16 579.59 4.08 289.80 20.57 22.35 78.21 5.00 14.29</code></div></div></td></tr></tbody></table></div></div>
<p>上面的 iostat 输出表明秒有 28.57 次设备 I/O 操作: 总IO(io)/s = r/s(读) +w/s(写) = 1.02+27.55 = 28.57 (次/秒) 其中写操作占了主体 (w:r = 27:1)。</p>
<p>平均每次设备 I/O 操作只需要 5ms 就可以完成，但每个 I/O 请求却需要等上 78ms，为什么? 因为发出的 I/O 请求太多 (每秒钟约 29 个)，假设这些请求是同时发出的，那么平均等待时间可以这样计算:</p>
<p>平均等待时间 = 单个 I/O 服务时间 * ( 1 + 2 + &#8230; + 请求总数-1) / 请求总数</p>
<p>应用到上面的例子: 平均等待时间 = 5ms * (1+2+&#8230;+28)/29 = 70ms，和 iostat 给出的78ms 的平均等待时间很接近。这反过来表明 I/O 是同时发起的。</p>
<p>每秒发出的 I/O 请求很多 (约 29 个)，平均队列却不长 (只有 2 个 左右)，这表明这 29 个请求的到来并不均匀，大部分时间 I/O 是空闲的。</p>
<p>一秒中有 14.29% 的时间 I/O 队列中是有请求的，也就是说，85.71% 的时间里 I/O 系统无事可做，所有 29 个 I/O 请求都在142毫秒之内处理掉了。</p>
<p>delta(ruse+wuse)/delta(io) = await = 78.21 =&gt; delta(ruse+wuse)/s =78.21 * delta(io)/s = 78.21*28.57 = 2232.8，表明每秒内的I/O请求总共需要等待2232.8ms。所以平均队列长度应为 2232.8ms/1000ms = 2.23，而 iostat 给出的平均队列长度 (avgqu-sz) 却为 22.35，为什么?! 因为 iostat 中有 bug，avgqu-sz 值应为 2.23，而不是 22.35。</p><!--[syntaxhighlighter]--><!--代码高亮，请勿编辑-->
<script type="text/javascript" src="http://www.php-oa.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shCore.js"></script><script type="text/javascript" src="http://www.php-oa.com/wp-content/plugins/ck-and-syntaxhighlighter/syntaxhighlighter/scripts/shBrushBash.js"></script><script type="text/javascript">
			SyntaxHighlighter.defaults['class-name']	= '';
			SyntaxHighlighter.defaults['smart-tabs']	= true;
			SyntaxHighlighter.defaults['tab-size']		= 4;
			SyntaxHighlighter.defaults['gutter']		= false;
			SyntaxHighlighter.defaults['quick-code']	= true;
			SyntaxHighlighter.defaults['collapse'] 		= false;
			SyntaxHighlighter.defaults['auto-links']	= true;
			SyntaxHighlighter.defaults['toolbar']		= true;
			SyntaxHighlighter.all();
			</script>
<!--[/syntaxhighlighter]--><!-- Start of add bookmark buttons created by wp_addbookmarks. Plugin by http://www.thinkagain.cn/ --><img src ="http://www.blogjava.net/orangehf/aggbug/362534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-11-02 15:14 <a href="http://www.blogjava.net/orangehf/archive/2011/11/02/362534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Understanding software Installation (configure, make, make install)</title><link>http://www.blogjava.net/orangehf/archive/2011/09/28/359689.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Wed, 28 Sep 2011 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/09/28/359689.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/359689.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/09/28/359689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/359689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/359689.html</trackback:ping><description><![CDATA[<div align="left"><font size="-1" face="Verdana, Arial, Helvetica, sans-serif">This tutorial is aimed at those who have just started using Linux. Generally when users from the Windows background enter the Linux scene,they are totally stumped by the software installation method. They were used to the luxury of double clicking on a single file and getting their software installed. But now they have to type cryptic commands to do the same.<br /><br />Though the installation instructions tell them what to do, they have no idea <em>what those steps actually do</em>. This article shall explain the basics of software installation. After reading this article you would feel more at home when installing your next software.<br /><br />Generally beginners tend to search desperately for RPMs since installing RPMs is a real simple task. But this article doesn't talk about RPMs. It deals with the softwares that you generally get in the zipped formats as tarballs.<br /><br /><strong><br />Details :<br /><br /></strong>Generally you would get Linux software in the tarball format (.tgz) This file has to be uncompressed into any directory using tar command. In case you download a new tarball by the name game.tgz, then you would have to type the following command<br /><br /><strong>$ tar xfvz game.tgz<br /><br /></strong>This would create a directory within the current directory and unzip all the files within that new directory. Once this is complete the installation instructions ask you to execute the 3 (now famous) commands : configure, make &amp; make install. Most of the users do this and successfully install their softwares. But most of the newbies have no idea what this really does. The rest of the article shall explain the meaning of these 3 commands<br /><br />Each software comes with a few files which are solely for the purpose of installation sake. One of them is the configure script. The user has to run the following command at the prompt<br /><br /><strong>$ ./configure<br /><br /></strong>The above command makes the shell run the script named ' <em>configure</em> ' which exists in the current directory. The configure script basically consists of many lines which are used to check some details about the machine on which the software is going to be installed. This script checks for lots of dependencies on your system. For the particular software to work properly, it may be requiring a lot of things to be existing on your machine already. When you run the configure script you would see a lot of output on the screen , each being some sort of question and a respective yes/no as the reply. If any of the major requirements are missing on your system, the configure script would exit and you cannot proceed with the installation, until you get those required things. <br /><br />The main job of the configure script is to create a ' <em>Makefile</em> ' . This is a very important file for the installation process. Depending on the results of the tests (checks) that the configure script performed it would write down the various steps that need to be taken (while compiling the software) in the file named Makefile.<br /><br />If you get no errors and the configure script runs successfully (if there is any error the last few lines of the output would glaringly be stating the error) then you can proceed with the next command which is<br /><br /><strong>$ make<br /><br /></strong>' <em>make</em> ' is actually a utility which exists on almost all Unix systems. For make utility to work it requires a file named Makefile in the same directory in which you run make. As we have seen the configure script's main job was to create a file named Makefile to be used with make utility. (Sometimes the Makefile is named as makefile also)<br /><br />make would use the directions present in the Makefile and proceed with the installation. The Makefile indicates the sequence, that Linux must follow to build various components / sub-programs of your software. The sequence depends on the way the software is designed as well as many other factors.<br /><br />The Makefile actually has a lot of labels (sort of names for different sections). Hence depending on what needs to be done the control would be passed to the different sections within the Makefile Or it is possible that at the end of one of the section there is a command to go to some next section.<br /><br />Basically the make utility compiles all your program code and creates the executables. For particular section of the program to complete might require some other part of the code already ready, this is what the Makefile does. It sets the sequence for the events so that your program does not complain about missing dependencies.<br /><br /><em>One of the labels present in the Makefile happens to be named ' <strong>install</strong> ' .</em><br /><br />If make ran successfully then you are almost done with the installation. Only the last step remains which is<br /><br /></font><strong><font size="-1" face="Verdana, Arial, Helvetica, sans-serif">$ make install<br /><br /></font></strong><font size="-1" face="Verdana, Arial, Helvetica, sans-serif">As indicated before make uses the file named Makefile in the same directory. When you run make without any parameters, the instruction in the Makefile begin executing from the start and as per the rules defined within the Makefile (particular sections of the code may execute after one another..thats why labels are used..to jump from one section to another). But <em>when you run make with install as the parameter, the make utility searches for a label named install within the Makefile, and executes only that section of the Makefile.</em><br /><br /></font><font size="-1" face="Verdana, Arial, Helvetica, sans-serif">The install section happens to be only a part where the executables and other required files created during the last step (i.e. make) are copied into the required final directories on your machine. E.g. the executable that the user runs may be copied to the /usr/local/bin so that all users are able to run the software. Similarly all the other files are also copied to the standard directories in Linux. Remember that when you ran make, all the executables were created in the temporary directory where you had unzipped your original tarball. So when you run make install, these executables are copied to the final directories.<br /><br /></font><font size="-1" face="Verdana, Arial, Helvetica, sans-serif">Thats it !! Now the installation process must be clear to you. You surely will feel more at home when you begin your next software installation.</font></div><br />原文地址：<a href="http://www.codecoffee.com/tipsforlinux/articles/27.html">http://www.codecoffee.com/tipsforlinux/articles/27.html</a><img src ="http://www.blogjava.net/orangehf/aggbug/359689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-09-28 14:01 <a href="http://www.blogjava.net/orangehf/archive/2011/09/28/359689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle rman</title><link>http://www.blogjava.net/orangehf/archive/2011/09/15/358724.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Thu, 15 Sep 2011 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/09/15/358724.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/358724.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/09/15/358724.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/358724.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/358724.html</trackback:ping><description><![CDATA[<a href="http://www.bccn.net/Article/sjk/oracle/200601/3470_2.html">http://www.bccn.net/Article/sjk/oracle/200601/3470_2.html</a><br /><a href="http://www.beifenruanjian.com/oracle/redhat-linux-as4-on-the-use-of-rman-for-backup-and-recovery-testing/">http://www.beifenruanjian.com/oracle/redhat-linux-as4-on-the-use-of-rman-for-backup-and-recovery-testing/</a><br /><a href="http://blog.sina.com.cn/s/blog_3fb41b900100h7sg.html">http://blog.sina.com.cn/s/blog_3fb41b900100h7sg.html</a><br /><a href="http://database.e800.com.cn/articles/2008/116/1200428070211771370_1.html">http://database.e800.com.cn/articles/2008/116/1200428070211771370_1.html</a><br /><a href="http://blog.csdn.net/tianlesoftware/article/details/4699320">http://blog.csdn.net/tianlesoftware/article/details/4699320</a> <br /><br />rman 恢复：<br /><a href="http://space.itpub.net/9765498/viewspace-237930">http://space.itpub.net/9765498/viewspace-237930</a> <br /><a href="http://space.itpub.net/8334342/viewspace-521139">http://space.itpub.net/8334342/viewspace-521139</a><img src ="http://www.blogjava.net/orangehf/aggbug/358724.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-09-15 16:54 <a href="http://www.blogjava.net/orangehf/archive/2011/09/15/358724.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 表解锁 </title><link>http://www.blogjava.net/orangehf/archive/2011/08/22/357052.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Mon, 22 Aug 2011 08:04:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/08/22/357052.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/357052.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/08/22/357052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/357052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/357052.html</trackback:ping><description><![CDATA[1.获取锁住的表的信息
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img id="Codehighlighter1_7_17_Open_Image" onclick="this.style.display='none'; Codehighlighter1_7_17_Open_Text.style.display='none'; Codehighlighter1_7_17_Closed_Image.style.display='inline'; Codehighlighter1_7_17_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"><img style="display: none" id="Codehighlighter1_7_17_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_7_17_Closed_Text.style.display='none'; Codehighlighter1_7_17_Open_Image.style.display='inline'; Codehighlighter1_7_17_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_7_17_Closed_Text">/**/</span><span id="Codehighlighter1_7_17_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">+&nbsp;rule&nbsp;</span><span style="color: #008080">*/</span></span><span style="color: #000000"><br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;s.username,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;decode(l.type,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">TM</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">TABLE&nbsp;LOCK</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">TX</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">ROW&nbsp;LOCK</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">NULL</span><span style="color: #000000">)&nbsp;LOCK_LEVEL,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;o.owner,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;o.</span><span style="color: #ff00ff">object_name</span><span style="color: #000000">,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;o.object_type,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;s.sid,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;s.serial#,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;s.terminal,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;s.machine,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;s.program,<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;s.osuser<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;v$session&nbsp;s,&nbsp;v$lock&nbsp;l,&nbsp;dba_objects&nbsp;o<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;l.sid&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;s.sid<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;l.id1&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;o.</span><span style="color: #ff00ff">object_id</span><span style="color: #000000">(</span><span style="color: #808080">+</span><span style="color: #000000">)<br /><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;s.username&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">NOT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">Null</span></div><br /><br />2.进行解锁 <br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;system&nbsp;</span><span style="color: #0000ff">kill</span><span style="color: #000000">&nbsp;session&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">sid,serial#</span><span style="color: #ff0000">'</span><span style="color: #000000">;</span></div><img src ="http://www.blogjava.net/orangehf/aggbug/357052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-08-22 16:04 <a href="http://www.blogjava.net/orangehf/archive/2011/08/22/357052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ORACLE批量绑定FORALL与BULK COLLECT </title><link>http://www.blogjava.net/orangehf/archive/2011/08/22/357028.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Mon, 22 Aug 2011 04:55:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/08/22/357028.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/357028.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/08/22/357028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/357028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/357028.html</trackback:ping><description><![CDATA[转自：<a href="http://log-cd.iteye.com/blog/411122">http://log-cd.iteye.com/blog/411122</a><br /><br />FORALL与BULK COLLECT的使用方法: <br />1．使用FORALL比FOR效率高，因为前者只切换一次上下文，而后者将是在循环次数一样多个上下文间切换。 <br /><br />2．使用BLUK COLLECT一次取出一个数据集合，比用游标条取数据效率高，尤其是在网络不大好的情况下。但BLUK COLLECT需要大量内存。 <br /><br />例子: 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">table</span><span style="color: #000000">&nbsp;test_forall&nbsp;(&nbsp;</span><span style="color: #ff00ff">user_id</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">number</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">10</span><span style="color: #000000">),&nbsp;</span><span style="color: #ff00ff">user_name</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">varchar2</span><span style="color: #000000">(</span><span style="color: #800000; font-weight: bold">20</span><span style="color: #000000">));</span></div><strong><br />select into 中使用bulk colle<strong>ct</strong> 
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">DECLARE</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;TYPE&nbsp;table_forall&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">OF</span><span style="color: #000000">&nbsp;test_forall</span><span style="color: #808080">%</span><span style="color: #000000">ROWTYPE;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;v_table&nbsp;table_forall;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">BEGIN</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;mub.</span><span style="color: #ff00ff">user_id</span><span style="color: #000000">,mub.</span><span style="color: #ff00ff">user_name</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">BULK</span><span style="color: #000000">&nbsp;COLLECT&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;v_table&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;mag_user_basic&nbsp;mub&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;mub.</span><span style="color: #ff00ff">user_id</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">BETWEEN</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">10000</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">10100</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;FORALL&nbsp;idx&nbsp;</span><span style="color: #808080">IN</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">..v_table.</span><span style="color: #ff00ff">COUNT</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;test_forall&nbsp;</span><span style="color: #0000ff">VALUES</span><span style="color: #000000">&nbsp;v_table(idx);&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">VALUES(v_table(idx).user_id,v_table(idx).user_name);Error&nbsp;&nbsp;&nbsp;</span><span style="color: #008080"><br /></span><span style="color: #008080">12</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">在PL/SQL中，BULK&nbsp;In-BIND与RECORD，%ROWTYPE是不能在一块使用的，&nbsp;&nbsp;&nbsp;</span><span style="color: #008080"><br /></span><span style="color: #008080">13</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">也就是说，BULK&nbsp;In-BIND只能与简单类型的数组一块使用&nbsp;&nbsp;&nbsp;</span><span style="color: #008080"><br /></span><span style="color: #008080">14</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">COMMIT</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />EXCEPTION&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHEN</span><span style="color: #000000">&nbsp;OTHERS&nbsp;</span><span style="color: #0000ff">THEN</span><span style="color: #000000">&nbsp;&nbsp;<br /></span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ROLLBACK</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;&nbsp;&nbsp;<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div></strong><br /><strong>f<strong>etch into 中使用bulk collect</strong> <br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">DECLARE</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;TYPE&nbsp;table_forall&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">OF</span><span style="color: #000000">&nbsp;test_forall</span><span style="color: #808080">%</span><span style="color: #000000">ROWTYPE;<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;v_table&nbsp;table_forall;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">CURSOR</span><span style="color: #000000">&nbsp;c1&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;mub.</span><span style="color: #ff00ff">user_id</span><span style="color: #000000">,mub.</span><span style="color: #ff00ff">user_name</span><span style="color: #000000"><br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;mag_user_basic&nbsp;mub<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;mub.</span><span style="color: #ff00ff">user_id</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">BETWEEN</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">10000</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">AND</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">10100</span><span style="color: #000000">;<br /></span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">BEGIN</span><span style="color: #000000"><br /></span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">OPEN</span><span style="color: #000000">&nbsp;c1;<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">在fetch&nbsp;into中使用bulk&nbsp;collect</span><span style="color: #008080"><br /></span><span style="color: #008080">12</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FETCH</span><span style="color: #000000">&nbsp;c1&nbsp;</span><span style="color: #0000ff">BULK</span><span style="color: #000000">&nbsp;COLLECT&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;v_table;<br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;FORALL&nbsp;idx&nbsp;</span><span style="color: #808080">IN</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">1</span><span style="color: #000000">..v_table.</span><span style="color: #ff00ff">COUNT</span><span style="color: #000000"><br /></span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">INSERT</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">INTO</span><span style="color: #000000">&nbsp;test_forall&nbsp;</span><span style="color: #0000ff">VALUES</span><span style="color: #000000">&nbsp;v_table(idx);<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">COMMIT</span><span style="color: #000000">;<br /></span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br /></span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />EXCEPTION<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHEN</span><span style="color: #000000">&nbsp;OTHERS&nbsp;</span><span style="color: #0000ff">THEN</span><span style="color: #000000"><br /></span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ROLLBACK</span><span style="color: #000000">;<br /></span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;</span></div></strong><br /><strong>在returning into中使用bulk collect</strong> <br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><strong><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">CREATE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;test_forall2&nbsp;</span><span style="color: #0000ff">AS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">SELECT</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">FROM</span></strong><strong><span style="color: #000000">&nbsp;test_forall;<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">--在returning&nbsp;into中使用bulk&nbsp;collect</span></strong><span style="color: #008080"><br /></span><strong><span style="color: #008080">&nbsp;3</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">DECLARE</span></strong><span style="color: #000000"><br /></span><strong><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;TYPE&nbsp;IdList&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">OF</span><span style="color: #000000">&nbsp;test_forall.</span><span style="color: #ff00ff">User_Id</span><span style="color: #808080">%</span></strong><strong><span style="color: #000000">TYPE;<br /></span><span style="color: #008080">&nbsp;5</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;enums&nbsp;IdList;<br /></span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;TYPE&nbsp;NameList&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">TABLE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">OF</span><span style="color: #000000">&nbsp;test_forall.</span><span style="color: #ff00ff">user_name</span><span style="color: #808080">%</span></strong><strong><span style="color: #000000">TYPE;<br /></span><span style="color: #008080">&nbsp;7</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;names&nbsp;NameList;<br /></span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">BEGIN</span></strong><span style="color: #000000"><br /></span><strong><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">DELETE</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">FROM</span><span style="color: #000000">&nbsp;test_forall2&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user_id</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">10100</span></strong><span style="color: #000000"><br /></span><strong><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETURNING&nbsp;</span><span style="color: #ff00ff">user_id</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff00ff">user_name</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">BULK</span><span style="color: #000000">&nbsp;COLLECT&nbsp;</span><span style="color: #0000ff">INTO</span></strong><strong><span style="color: #000000">&nbsp;enums,&nbsp;names;<br /></span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;dbms_output.put_line(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Deleted&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">||</span><span style="color: #000000">&nbsp;SQL</span><span style="color: #808080">%</span><span style="color: #0000ff">ROWCOUNT</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">||</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;rows:</span><span style="color: #ff0000">'</span></strong><strong><span style="color: #000000">);<br /></span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FOR</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #808080">IN</span></strong><strong><span style="color: #000000">&nbsp;enums.FIRST&nbsp;..&nbsp;enums.LAST<br /></span><span style="color: #008080">13</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;LOOP<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">User&nbsp;#</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">||</span><span style="color: #000000">&nbsp;enums(i)&nbsp;</span><span style="color: #808080">||</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">:&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">||</span></strong><strong><span style="color: #000000">&nbsp;names(i));<br /></span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span></strong><strong><span style="color: #000000">&nbsp;LOOP;<br /></span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">COMMIT</span></strong><strong><span style="color: #000000">;<br /></span><span style="color: #008080">17</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">18</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />EXCEPTION<br /></span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">WHEN</span><span style="color: #000000">&nbsp;OTHERS&nbsp;</span><span style="color: #0000ff">THEN</span></strong><span style="color: #000000"><br /></span><strong><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">ROLLBACK</span></strong><strong><span style="color: #000000">;<br /></span><span style="color: #008080">21</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">22</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">END</span><span style="color: #000000">;</span></strong></div><br /><strong>批量更新中，将for改成forall</strong> <br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><strong><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">DECLARE</span></strong><strong><span style="color: #000000">&nbsp;<br /></span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;TYPE&nbsp;NumList&nbsp;</span><span style="color: #0000ff">IS</span><span style="color: #000000">&nbsp;VARRAY(</span><span style="color: #800000; font-weight: bold">20</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">OF</span><span style="color: #000000">&nbsp;</span><span style="color: #000000; font-weight: bold">NUMBER</span></strong><strong><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;depts&nbsp;NumList&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;NumList(</span><span style="color: #800000; font-weight: bold">10</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000; font-weight: bold">30</span><span style="color: #000000">,&nbsp;</span><span style="color: #800000; font-weight: bold">70</span></strong><strong><span style="color: #000000">,&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />);<br /></span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;department&nbsp;numbers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></strong><span style="color: #008080"><br /></span><strong><span style="color: #008080">&nbsp;5</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">BEGIN</span></strong><strong><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;6</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">FOR</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #808080">IN</span></strong><strong><span style="color: #000000">&nbsp;depts.FIRST..depts.LAST<br /></span><span style="color: #008080">&nbsp;8</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOOP<br /></span><span style="color: #008080">&nbsp;9</span></strong><strong><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br /></span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">UPDATE&nbsp;statement&nbsp;is&nbsp;sent&nbsp;to&nbsp;the&nbsp;SQL&nbsp;engine&nbsp;</span></strong><span style="color: #008080"><br /></span><strong><span style="color: #008080">11</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;with&nbsp;each&nbsp;iteration&nbsp;of&nbsp;the&nbsp;FOR&nbsp;loop!</span></strong><span style="color: #008080"><br /></span><strong><span style="color: #008080">12</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">UPDATE</span><span style="color: #000000">&nbsp;emp&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;sal&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;sal&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">1.10</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;deptno&nbsp;</span><span style="color: #808080">=</span></strong><strong><span style="color: #000000">&nbsp;depts(i);<br /></span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span></strong><strong><span style="color: #000000">&nbsp;LOOP:&nbsp;<br /></span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">END</span><span style="color: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></strong></div><br />
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><strong><span style="color: #008080">1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #008080">--</span><span style="color: #008080">UPDATE&nbsp;statement&nbsp;is&nbsp;sent&nbsp;to&nbsp;the&nbsp;SQL&nbsp;engine&nbsp;just&nbsp;once,&nbsp;with&nbsp;the&nbsp;entire&nbsp;nested&nbsp;table</span></strong><span style="color: #008080"><br /></span><strong><span style="color: #008080">2</span><span style="color: #008080"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">FORALL&nbsp;i&nbsp;</span><span style="color: #808080">IN</span></strong><strong><span style="color: #000000">&nbsp;depts.FIRST..depts.LAST&nbsp;<br /></span><span style="color: #008080">3</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">UPDATE</span><span style="color: #000000">&nbsp;emp&nbsp;</span><span style="color: #0000ff">SET</span><span style="color: #000000">&nbsp;sal&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;sal&nbsp;</span><span style="color: #808080">*</span><span style="color: #000000">&nbsp;</span><span style="color: #800000; font-weight: bold">1.10</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">WHERE</span><span style="color: #000000">&nbsp;deptno&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;depts(i);&nbsp;</span></strong></div><br />
<div class="bar">&nbsp;To maximize performance, rewrite your programs as follows: <br />a. If an INSERT, UPDATE, or DELETE statement executes inside a loop and References collection elements, move it into a FORALL statement. <br />b. If a SELECT INTO, FETCH INTO, or RETURNING INTO clause references a <br />Collection, incorporate the BULK COLLECT clause. <br />c. If possible, use host arrays to pass collections back and forth between your Programs and the database server. <br />d. If the failure of a DML operation on a particular row is not a serious problem,Include the keywords SAVE EXCEPTIONS in the FORALL statement and report Or clean up the errors in a subsequent loop using the %BULK_EXCEPTIONS Attribute.</div><img src ="http://www.blogjava.net/orangehf/aggbug/357028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-08-22 12:55 <a href="http://www.blogjava.net/orangehf/archive/2011/08/22/357028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle查看表分区情况sql</title><link>http://www.blogjava.net/orangehf/archive/2011/08/10/356249.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Wed, 10 Aug 2011 08:38:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/08/10/356249.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/356249.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/08/10/356249.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/356249.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/356249.html</trackback:ping><description><![CDATA[<div class="tit7"></div>
<div style="line-height: 1.3" id="detail" class="detail">
<p>select * from user_tab_subpartitions t where t.table_name = upper('tablename');<br />select * from user_tab_partitions t where t.table_name = upper('tablename'); 
<div></div>
<p>&nbsp;</p></div><img src ="http://www.blogjava.net/orangehf/aggbug/356249.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-08-10 16:38 <a href="http://www.blogjava.net/orangehf/archive/2011/08/10/356249.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle存储过程被锁定的解决方法</title><link>http://www.blogjava.net/orangehf/archive/2011/08/04/355815.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Thu, 04 Aug 2011 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/08/04/355815.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/355815.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/08/04/355815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/355815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/355815.html</trackback:ping><description><![CDATA[1.在plsql会话中kill掉使用该存储过程的session<br /><br />2.若该存储过程还被锁定，使用sys登录数据库，执行如下语句，得到进程id<br />select spid from <br />sys.v$process p, sys.v$session s <br />where p.addr = s.paddr<br />and s.status='KILLED'<br /><br />3.在OS下kill掉这个进程<br />kill -9 14936 <img src ="http://www.blogjava.net/orangehf/aggbug/355815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-08-04 17:13 <a href="http://www.blogjava.net/orangehf/archive/2011/08/04/355815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle牛人blog</title><link>http://www.blogjava.net/orangehf/archive/2011/08/03/355675.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Wed, 03 Aug 2011 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/08/03/355675.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/355675.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/08/03/355675.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/355675.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/355675.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/tianlesoftware">http://blog.csdn.net/tianlesoftware</a><img src ="http://www.blogjava.net/orangehf/aggbug/355675.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-08-03 15:10 <a href="http://www.blogjava.net/orangehf/archive/2011/08/03/355675.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle delete执行过程的流程介绍</title><link>http://www.blogjava.net/orangehf/archive/2011/07/26/355052.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Tue, 26 Jul 2011 04:47:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/07/26/355052.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/355052.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/07/26/355052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/355052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/355052.html</trackback:ping><description><![CDATA[<p>转自：<a href="http://database.51cto.com/art/201004/196771.htm">http://database.51cto.com/art/201004/196771.htm</a><br /><br />以下的文章主要介绍的是<a href="http://database.51cto.com/art/200511/12457.htm"><font color="#004276">Oracle delete</font></a>的执行过程,我们大家都知道Oracle delete与Commit的实际操作的相关流程的具体分析，以下就是对其实际的操作流程的介绍，望你在浏览之后会有所收获。</p>
<p>（1）删除（delete）流程</p>
<p>Oracle读Block(数据块)到Buffer Cache（缓冲区）(如果该Block在Buffer中不存在)；</p>
<p>在Redo Log Buffer（重做日志缓冲区）中记录Oracledelete操作的细节；</p>
<p>在相应回滚段段头的事物表中创建一个Undo（回滚）条目；</p>
<p>把将要删除的记录创建前镜像，存放到Undo Block（回滚块）中；</p>
<p>在Buffer Cache中的相应数据块上删除记录，并且标记相应的数据块为Dirty（脏）。</p>
<p>（2）提交(Commit)流程</p>
<p>Oracle产生一个SCN；</p>
<p>在回滚段事物表中标记该事物状态为Commited；</p>
<p>LGWR（日志读写进程）Flush Log Buffer到日志文件；</p>
<p>如果此时数据块仍然在Buffer Cache中，那么SCN将被记录到Block Header上，这被称为快速提交；</p>
<p>如果Dirty Block已经被写回到磁盘，那么下一个访问这个Block的进程将会自回滚段中获取该事物的状态，确认该事物被提交。然后这个进程获得提交SCN并写回到Block Header上，这被称为延迟块清除。</p><img src ="http://www.blogjava.net/orangehf/aggbug/355052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-07-26 12:47 <a href="http://www.blogjava.net/orangehf/archive/2011/07/26/355052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle的Nologging何时生效 与 批量insert加载数据速度</title><link>http://www.blogjava.net/orangehf/archive/2011/07/19/354639.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Tue, 19 Jul 2011 08:09:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/07/19/354639.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/354639.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/07/19/354639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/354639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/354639.html</trackback:ping><description><![CDATA[<div class="storytext">
<p><font size="2">转自：<a href="http://www.blogjava.net/caizh2009/articles/306531.html">http://www.blogjava.net/caizh2009/articles/306531.html</a><br /><br />一 非归档模式下</font></p>
<p><font size="2">D:&gt;sqlplus "/ as sysdba"</font></p>
<p><font size="2">数据库版本为9.2.0.1.0</font></p>
<p><font size="2">SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 8月 14 10:20:39 2006</font></p>
<p><font size="2">Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.</font></p><br />
<p>
<p><br /><font size="2">连接到:<br />Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production<br />With the Partitioning, OLAP and Oracle Data Mining options<br />JServer Release 9.2.0.1.0 - Production</font> 
<p>
<p><font size="2">当前session产生的redo<br />SQL&gt; create or replace view redo_size<br />2 as<br />3 select value<br />4 from v$mystat, v$statname<br />5 where v$mystat.statistic# = v$statname.statistic#<br />6 and v$statname.name = 'redo size';</font></p>
<p><font size="2">视图已建立。</font></p>
<p><font size="2">授权给相应数据库schema<br />SQL&gt; grant select on redo_size to liyong;</font></p>
<p><font size="2">授权成功。</font></p>
<p><font size="2">SQL&gt; shutdown immediate;<br />数据库已经关闭。<br />已经卸载数据库。<br />ORACLE 例程已经关闭。</font></p>
<p><font size="2">SQL&gt; startup mount;<br />ORACLE 例程已经启动。</font></p>
<p><font size="2">Total System Global Area 122755896 bytes<br />Fixed Size 453432 bytes<br />Variable Size 88080384 bytes<br />Database Buffers 33554432 bytes<br />Redo Buffers 667648 bytes<br />数据库装载完毕。</font></p>
<p><font size="2">非归档模式<br />SQL&gt; alter database noarchivelog;</font></p>
<p><font size="2">数据库已更改。</font></p>
<p><font size="2">SQL&gt; alter database open;</font></p>
<p><font size="2">数据库已更改。</font></p>
<p><font size="2">SQL&gt; create table redo_test as<br />2 select * from all_objects where 1=2;</font></p>
<p><font size="2">表已创建。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />59488</font></p>
<p><font size="2">SQL&gt; insert into redo_test<br />2 select * from all_objects;</font></p>
<p><font size="2">已创建28260行。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />3446080</font></p>
<p><font size="2">SQL&gt; insert /*+ append */ into redo_test<br />2 select * from all_objects;</font></p>
<p><font size="2">已创建28260行。</font></p>
<p><font size="2">SQL&gt; commit;</font></p>
<p><font size="2">提交完成。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />3458156</font></p>
<p><font size="2">可以看到insert /*+ append */ into方式redo产生很少.<br />SQL&gt; select 3446080-59488,3458156-3446080 from dual;</font></p>
<p><font size="2">3446080-59488 3458156-3446080<br />------------- ---------------<br />3386592 12076</font></p>
<p>
<p><font size="2">将表redo_test置为nologging状态.<br />SQL&gt; alter table redo_test nologging;</font></p>
<p><font size="2">表已更改。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />3460052</font></p>
<p><font size="2">SQL&gt; insert into redo_test<br />2 select * from all_objects;</font></p>
<p><font size="2">已创建28260行。</font></p>
<p><font size="2">SQL&gt; commit;</font></p>
<p><font size="2">提交完成。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />6805876</font></p>
<p><font size="2">SQL&gt; insert /*+ append */ into redo_test<br />2 select * from all_objects;</font></p>
<p><font size="2">已创建28260行。</font></p>
<p><font size="2">SQL&gt; commit;</font></p>
<p><font size="2">提交完成。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />6818144</font></p>
<p><font size="2">非归档模式下表的nologging状态对于redo影响不大<br />SQL&gt; select 6805876-3460052,6818144-6805876 from dual;</font></p>
<p><font size="2">6805876-3460052 6818144-6805876<br />--------------- ---------------<br />3345824 12268</font></p>
<p><br /><font size="2">结论: 在非归档模式下通过insert /*+ append */ into方式批量加载数据可以大大减少redo产生.</font></p>
<p>
<p>
<p>
<p>
<p><font size="2">二 归档模式下</font></p>
<p><br /><font size="2">SQL&gt; shutdown immediate;<br />数据库已经关闭。<br />已经卸载数据库。<br />ORACLE 例程已经关闭。<br />SQL&gt; startup mount;<br />ORACLE 例程已经启动。</font></p>
<p><font size="2">Total System Global Area 122755896 bytes<br />Fixed Size 453432 bytes<br />Variable Size 88080384 bytes<br />Database Buffers 33554432 bytes<br />Redo Buffers 667648 bytes<br />数据库装载完毕。<br />SQL&gt; alter database archivelog;</font></p>
<p><font size="2">数据库已更改。</font></p>
<p><font size="2">SQL&gt; alter database open;</font></p>
<p><font size="2">数据库已更改。</font></p>
<p><font size="2">SQL&gt; conn liyong<br />请输入口令:<br />已连接。</font></p>
<p><br /><font size="2">将表redo_test重新置为logging<br />SQL&gt; alter table redo_test logging;</font></p>
<p><font size="2">表已更改。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />5172</font></p>
<p><font size="2">SQL&gt; insert into redo_test<br />2 select * from all_objects;</font></p>
<p><font size="2">已创建28260行。</font></p>
<p><font size="2">SQL&gt; commit;</font></p>
<p><font size="2">提交完成。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />3351344</font></p>
<p><font size="2">SQL&gt; insert /*+ append */ into redo_test<br />2 select * from all_objects;</font></p>
<p><font size="2">已创建28260行。</font></p>
<p><font size="2">SQL&gt; commit;</font></p>
<p><font size="2">提交完成。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />6659932</font></p>
<p><font size="2">可以看到在归档模式下，且表的logging属性为true,insert /*+ append */ into这种方式也会纪录大量redo<br />SQL&gt; select 3351344-5172,6659932-3351344 from dual;</font></p>
<p><font size="2">3351344-5172 6659932-3351344<br />------------ ---------------<br />3346172 3308588</font></p>
<p><br /><font size="2">将表置为nologging</font></p>
<p><font size="2">SQL&gt; alter table redo_test nologging;</font></p>
<p><font size="2">表已更改。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />6661820</font></p>
<p><font size="2">SQL&gt; insert into redo_test<br />2 select * from all_objects;</font></p>
<p><font size="2">已创建28260行。</font></p>
<p><font size="2">SQL&gt; commit;</font></p>
<p><font size="2">提交完成。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />10008060</font></p>
<p><font size="2">SQL&gt; insert /*+ append */ into redo_test<br />2 select * from all_objects;</font></p>
<p><font size="2">已创建28260行。</font></p>
<p><font size="2">SQL&gt; commit;</font></p>
<p><font size="2">提交完成。</font></p>
<p><font size="2">SQL&gt; select * from sys.redo_size;</font></p>
<p><font size="2">VALUE<br />----------<br />10022852</font></p>
<p><font size="2">可以发现在归档模式，要设置表的logging属性为false，才能通过insert /*+ append */ into大大减少redo产生.<br />SQL&gt; select 10008060-6661820,10022852-10008060 from dual;</font></p>
<p><font size="2">10008060-6661820 10022852-10008060<br />---------------- -----------------<br />3346240 14792</font></p>
<p>
<p><font size="2">结论: 在归档模式下,要设置表的logging属性为false，<br />才能通过insert /*+ append */ into大大减少redo.</font></p>
<p>
<p>
<p>
<p>
<p><font size="2">三 下面我们再看一下在归档模式下，几种批量insert操作的效率对比.</font></p>
<p>
<p><font size="2">redo_test表有45W条记录</font></p>
<p><font size="2">SQL&gt; select count(*) from redo_test;</font></p>
<p><font size="2">COUNT(*)<br />----------<br />452160</font></p>
<p><br /><font size="2">1 最常见的批量数据加载 25秒</font></p>
<p><font size="2">SQL&gt; create table insert_normal as<br />2 select * from redo_test where 0=2;</font></p>
<p><font size="2">表已创建。</font></p>
<p><font size="2">SQL&gt; set timing on</font></p>
<p><font size="2">SQL&gt; insert into insert_normal<br />2 select * from redo_test;</font></p>
<p><font size="2">已创建452160行。</font></p>
<p><font size="2">提交完成。<br />已用时间: 00: 00: 25.00</font></p>
<p><br /><font size="2">2 使用insert /*+ append */ into方式(这个的原理可以参见&lt;&lt;批量DML操作优化建议.txt&gt;&gt;)，但纪录redo. 17.07秒<br />SQL&gt; create table insert_hwt<br />2 as<br />3 select * from redo_test where 0=2;</font></p>
<p><font size="2">表已创建。<br />SQL&gt; insert /*+ append */ into insert_hwt<br />2 select * from redo_test;</font></p>
<p><font size="2">已创建452160行。</font></p>
<p><font size="2">提交完成。<br />已用时间: 00: 00: 17.07</font></p>
<p><br /><font size="2">3 使用insert /*+ append */ into方式，且通过设置表nologging不纪录redo.</font></p>
<p><font size="2">SQL&gt; create table insert_hwt_with_nologging nologging<br />2 as<br />3 select * from redo_test where 2=0;</font></p>
<p><font size="2">表已创建。</font></p>
<p><font size="2">/*<br />或者通过<br />alter table table_name nologging设置<br />*/</font></p>
<p><font size="2">SQL&gt; insert /*+ append */ into insert_hwt_with_nologging 11.03秒<br />2 select * from redo_test;</font></p>
<p><font size="2">已创建452160行。</font></p>
<p><font size="2">提交完成。<br />已用时间: 00: 00: 11.03</font></p>
<p>
<p><font size="2">总结:</font></p>
<p><font size="2">我们看到对于批量操作，如果设置表nologging，可以大大提高性能.原因就是Oracle没有纪录DML所产生的redo.<br />当然，这样会影响到备份。nologging加载数据后要做数据库全备.<br /><strong style="color: #0000ff">--------------------------------------------------------------------------------------------------------------------------------</strong></p><strong><br /></strong>
<div class="storyposted">jolly10 发表于:2008.03.18 13:19 ::分类: ( <a href="http://jolly10.itpub.net/category/7268/56630"><font color="#444444">转载学习内容</font></a> ) ::阅读:(1097次) :: <a href="http://jolly10.itpub.net/post/7268/457533"><font color="#444444">评论 (3)</font></a> :: <a href="http://jolly10.itpub.net/trackbacks/7268/457533"><font color="#444444">引用 (0)</font></a> </div>
<div class="story">
<div class="storyTitle"><img alt="" src="http://blog.itpub.net//imgs/comment_icon1.gif" /> re: Oracle的Nologging何时生效 与 批量insert加载数据速度(zt) <span class="categoryinfo">[<a href="http://jolly10.itpub.net/index.php?op=Comment&amp;articleId=457533&amp;parentId=21193736&amp;blogId=7268"><font color="#444444">回复</font></a>]</span> </div>
<div class="storytext">
<p>下面我又试了试insert into XXX values (XXX)能不能少产生redo,做了试验发现,不行的,下面的过程.<br />SQL&gt; select * from v$version where rownum archive log list;<br />Database log mode No Archive Mode<br />Automatic archival Disabled<br />Archive destination USE_DB_RECOVERY_FILE_DEST<br />Oldest online log sequence 17<br />Current log sequence 19</p>
<p>SQL&gt; create or replace view redo_size<br />2 as<br />3 select value<br />4 from v$mystat, v$statname<br />5 where v$mystat.statistic# = v$statname.statistic#<br />6 and v$statname.name = 'redo size';</p>
<p>View created.</p>
<p>SQL&gt; grant select on redo_size to ljg;</p>
<p>SQL&gt; conn ljg/ljg<br />Connected.</p>
<p>SQL&gt; create table redo_test as<br />2 select * from all_objects where 1=2;</p>
<p>SQL&gt; CREATE OR REPLACE PROCEDURE p_loging<br />2 as<br />3 CURSOR c_a IS<br />4 SELECT * FROM all_objects;<br />5<br />6 BEGIN<br />7 FOR x IN c_a LOOP<br />8 INSERT INTO REDO_TEST<br />9 VALUES(x.OWNER, x.OBJECT_NAME, x.SUBOBJECT_NAME, x.OBJECT_ID, x.DATA_OBJE CT_ID,<br />10 x.OBJECT_TYPE, x.CREATED, x.LAST_DDL_TIME, x.TIMESTAMP, x.STATUS, x.TEMPORARY, x.GENERATED, x.SECONDARY);<br />11 END LOOP;<br />12 COMMIT;<br />13<br />14 END;<br />15 /</p>
<p>Procedure created.</p>
<p>SQL&gt; CREATE OR REPLACE PROCEDURE p_nologing<br />2 as<br />3 CURSOR c_a IS<br />4 SELECT * FROM all_objects;<br />5<br />6 BEGIN<br />7 FOR x IN c_a LOOP<br />8 INSERT /*+ APPEND */ INTO REDO_TEST<br />9 VALUES(x.OWNER, x.OBJECT_NAME, x.SUBOBJECT_NAME, x.OBJECT_ID, x.DATA_OBJECT_ID,<br />10 x.OBJECT_TYPE, x.CREATED, x.LAST_DDL_TIME, x.TIMESTAMP, x.STATUS, x.TEMPORARY, x.GENERATED, x.SECONDARY);<br />11 END LOOP;<br />12 COMMIT;<br />13<br />14 END;<br />15 /</p>
<p>Procedure created.</p>
<p>SQL&gt; select * from sys.redo_size;</p>
<p>VALUE<br />----------<br />85940</p>
<p>SQL&gt; exec p_loging;</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL&gt; select * from sys.redo_size;</p>
<p>VALUE<br />----------<br />15273968</p>
<p>SQL&gt; exec p_nologing;</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL&gt; select * from sys.redo_size;</p>
<p>VALUE<br />----------<br />30411272</p>
<p>SQL&gt; select 15273968- 85940 logging,30411272-15273968 nologging from dual;</p>
<p>LOGGING NOLOGGING<br />---------- ----------<br />15188028 15137304</p>
<p>可以看到nologging和logging产生的redo差不多.</p></div>
<div class="storyposted">jolly10 评论于：2008.06.05 11:07 </div></div>
<div class="story">
<div class="storyTitle"><img alt="" src="http://blog.itpub.net//imgs/comment_icon1.gif" /> re: Oracle的Nologging何时生效 与 批量insert加载数据速度(zt) <span class="categoryinfo">[<a href="http://jolly10.itpub.net/index.php?op=Comment&amp;articleId=457533&amp;parentId=21193743&amp;blogId=7268"><font color="#444444">回复</font></a>]</span> </div>
<div class="storytext">
<p>下面我又试了试insert into XXX values (XXX)能不能少产生redo,做了试验发现,不行的,下面的过程.<br />SQL&gt; select * from v$version where rownum archive log list;<br />Database log mode No Archive Mode<br />Automatic archival Disabled<br />Archive destination USE_DB_RECOVERY_FILE_DEST<br />Oldest online log sequence 17<br />Current log sequence 19</p>
<p>SQL&gt; create or replace view redo_size<br />2 as<br />3 select value<br />4 from v$mystat, v$statname<br />5 where v$mystat.statistic# = v$statname.statistic#<br />6 and v$statname.name = 'redo size';</p>
<p>View created.</p>
<p>SQL&gt; grant select on redo_size to ljg;</p>
<p>SQL&gt; conn ljg/ljg<br />Connected.</p>
<p>SQL&gt; create table redo_test as<br />2 select * from all_objects where 1=2;</p>
<p>SQL&gt; CREATE OR REPLACE PROCEDURE p_loging<br />2 as<br />3 CURSOR c_a IS<br />4 SELECT * FROM all_objects;<br />5<br />6 BEGIN<br />7 FOR x IN c_a LOOP<br />8 INSERT INTO REDO_TEST<br />9 VALUES(x.OWNER, x.OBJECT_NAME, x.SUBOBJECT_NAME, x.OBJECT_ID, x.DATA_OBJE CT_ID,<br />10 x.OBJECT_TYPE, x.CREATED, x.LAST_DDL_TIME, x.TIMESTAMP, x.STATUS, x.TEMPORARY, x.GENERATED, x.SECONDARY);<br />11 END LOOP;<br />12 COMMIT;<br />13<br />14 END;<br />15 /</p>
<p>Procedure created.</p>
<p>SQL&gt; CREATE OR REPLACE PROCEDURE p_nologing<br />2 as<br />3 CURSOR c_a IS<br />4 SELECT * FROM all_objects;<br />5<br />6 BEGIN<br />7 FOR x IN c_a LOOP<br />8 INSERT /*+ APPEND */ INTO REDO_TEST<br />9 VALUES(x.OWNER, x.OBJECT_NAME, x.SUBOBJECT_NAME, x.OBJECT_ID, x.DATA_OBJECT_ID,<br />10 x.OBJECT_TYPE, x.CREATED, x.LAST_DDL_TIME, x.TIMESTAMP, x.STATUS, x.TEMPORARY, x.GENERATED, x.SECONDARY);<br />11 END LOOP;<br />12 COMMIT;<br />13<br />14 END;<br />15 /</p>
<p>Procedure created.</p>
<p>SQL&gt; select * from sys.redo_size;</p>
<p>VALUE<br />----------<br />85940</p>
<p>SQL&gt; exec p_loging;</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL&gt; select * from sys.redo_size;</p>
<p>VALUE<br />----------<br />15273968</p>
<p>SQL&gt; exec p_nologing;</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL&gt; select * from sys.redo_size;</p>
<p>VALUE<br />----------<br />30411272</p>
<p>SQL&gt; select 15273968- 85940 logging,30411272-15273968 nologging from dual;</p>
<p>LOGGING NOLOGGING<br />---------- ----------<br />15188028 15137304</p>
<p>可以看到nologging和logging产生的redo差不多.</p></div>
<div class="storyposted">jolly10 评论于：2008.06.05 11:07 </div></div>
<div class="story">
<div class="storyTitle"><img alt="" src="http://blog.itpub.net//imgs/comment_icon1.gif" /> re: Oracle的Nologging何时生效 与 批量insert加载数据速度(zt) <span class="categoryinfo">[<a href="http://jolly10.itpub.net/index.php?op=Comment&amp;articleId=457533&amp;parentId=21194307&amp;blogId=7268"><font color="#444444">回复</font></a>]</span> </div>
<div class="storytext">
<p>在ITPUB中问到可以用BULK COLLECT 来减少insert into values的redo.<br />CREATE OR REPLACE PROCEDURE p_BulkAdd<br />AS<br />TYPE Tredo_test IS TABLE OF REDO_TEST%ROWTYPE;<br />V_REDO_TEST Tredo_test;<br />BEGIN<br />SELECT * BULK COLLECT INTO V_REDO_TEST FROM ALL_OBJECTS;<br />FORALL X IN V_REDO_TEST.FIRST..V_REDO_TEST.LAST<br />INSERT INTO REDO_TEST VALUES V_REDO_TEST(X);<br />END;<br />/</p>
<p>SQL&gt; select * from sys.redo_size;</p>
<p>VALUE<br />----------<br />30411272</p>
<p>SQL&gt; exec p_bulkadd;</p>
<p>PL/SQL procedure successfully completed.</p>
<p>SQL&gt; select * from sys.redo_size;</p>
<p>VALUE<br />----------<br />35050796</p>
<p>SQL&gt; select 35050796-30411272 from dual;</p>
<p>35050796-30411272<br />-----------------<br />4639524</p>
<p>这个做的确是少了很多redo.是一个方法.</p></div></div>
<p></font></p></div><img src ="http://www.blogjava.net/orangehf/aggbug/354639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-07-19 16:09 <a href="http://www.blogjava.net/orangehf/archive/2011/07/19/354639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle分区索引：局部 locally &amp; 全局 global</title><link>http://www.blogjava.net/orangehf/archive/2011/07/07/353874.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Thu, 07 Jul 2011 07:02:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/07/07/353874.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/353874.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/07/07/353874.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/353874.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/353874.html</trackback:ping><description><![CDATA[<p><strong>表可以按range，hash，list分区，表分区后，其上的索引和普通表上的索引有所不同，oracle对于分区表上的索引分为2类，即局部索引和全局索引，下面分别对这2种索引的特点和局限性做个总结。</strong></p>
<p>&nbsp;</p>
<p><strong>局部索引local index</strong></p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 局部索引一定是分区索引，分区键等同于表的分区键，分区数等同于表的分区说，一句话，局部索引的分区机制和表的分区机制一样。</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果局部索引的索引列以分区键开头，则称为前缀局部索引。</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果局部索引的列不是以分区键开头，或者不包含分区键列，则称为非前缀索引。</p>
<p>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前缀和非前缀索引都可以支持索引分区消除，前提是查询的条件中包含索引分区键。</p>
<p>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 局部索引只支持分区内的唯一性，无法支持表上的唯一性，因此如果要用局部索引去给表做唯一性约束，则约束中必须要包括分区键列<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(ALTER TABLE TEST ADD CONSTRAINT PK_TEST PRIMARY KEY (SEQ_ID,PARTITION_ID) <span style="color: red">USING INDEX LOCAL</span>;)。</p>
<p>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 局部分区索引是对单个分区的，每个分区索引只指向一个表分区，全局索引则不然，一个分区索引能指向n个表分区，同时，一个表分区，也可能指向n个索引分区，对分区表中的某个分区做truncate或者move，shrink等，可能会影响到n个全局索引分区，正因为这点，局部分区索引具有更高的可用性。</p>
<p>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 位图索引只能为局部分区索引。</p>
<p>8.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 局部索引多应用于数据仓库环境中。</p>
<p>&nbsp;</p>
<p><strong>全局索引global index</strong></p>
<p>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全局索引的分区键和分区数和表的分区键和分区数可能都不相同，表和全局索引的分区机制不一样。</p>
<p>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全局索引可以分区，也可以是不分区索引，全局索引必须是前缀索引，即全局索引的索引列必须是以索引分区键作为其前几列。</p>
<p>3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全局分区索引的索引条目可能指向若干个分区，因此，对于全局分区索引，即使只</p>
<p>动，截断一个分区中的数据，都需要rebulid若干个分区甚</p>
<p>至是整个索引。</p>
<p>4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全局索引多应用于oltp系统中。</p>
<p>5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全局分区索引只按范围或者散列hash分区，hash分区是10g以后才支持。</p>
<p>6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; oracle9i以后对分区表做move或者truncate的时可以用update global indexes语句来同步更新全局分区索引，用消耗一定资源来换取高度的可用性。</p>
<p>7.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表用a列作分区，索引用b做局部分区索引，若where条件中用b来查询，那么oracle会扫描所有的表和索引的分区，成本会比分区更高，此时可以考虑用b做全局分区索引。</p>
<p>&nbsp;</p>
<p><strong>分区索引字典</strong></p>
<p>&nbsp;</p>
<p>DBA_PART_INDEXES 分区索引的概要统计信息，可以得知每个表上有哪些分区索引，分区索引的类新(local/global,)</p>
<p>Dba_ind_partitions每个分区索引的分区级统计信息</p>
<p>Dba_indexesminusdba_part_indexes，可以得到每个表上有哪些非分区索引</p>
<p>&nbsp;</p>
<p><strong>索引重建</strong></p>
<p>&nbsp;</p>
<p>Alter index idx_name rebuild partition index_partition_name [online nologging]</p>
<p>需要对每个分区索引做rebuild，重建的时候可以选择online(不会锁定表),或者nologging建立索引的时候不生成日志，加快速度。</p>
<p>Alter index rebuild idx_name [online nologging]</p>
<p>对非分区索引，只能整个index重建<br /><br />转自<br /><a href="http://www.csharpwin.com/dotnetspace/8650r3516.shtml">http://www.csharpwin.com/dotnetspace/8650r3516.shtml</a><br /><a href="http://hi.baidu.com/wxf966/blog/item/77954d074469e4df7a894700.html">http://hi.baidu.com/wxf966/blog/item/77954d074469e4df7a894700.html</a></p><img src ="http://www.blogjava.net/orangehf/aggbug/353874.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-07-07 15:02 <a href="http://www.blogjava.net/orangehf/archive/2011/07/07/353874.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中，什么是High-warter mark（HWM）</title><link>http://www.blogjava.net/orangehf/archive/2011/03/24/346959.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Thu, 24 Mar 2011 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/03/24/346959.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/346959.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/03/24/346959.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/346959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/346959.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Oracle数据的存储中，可以把存储空间想象为一个水库，数据想象为水库中的水。水库中的水的位置有一条线叫做水位线，在Oracle中，这条线被称为高水位线（High-warter mark, HWM）。在数据库表刚建立的时候，由于没有任何数据，所以这个时候水位线是空的，也就是说HWM为最低值。当插入了数据以后，高水位线就会上涨，但是这里也有一个特性，就是如果你采用delete语句删除数据的话，数据虽然被删除了，但是高水位线却没有降低，还是你刚才删除数据以前那么高的水位。也就是说，这条高水位线在日常的增删操作中只会上涨，不会下跌。</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面我们来谈一下Oracle中Select语句的特性。Select语句会对表中的数据进行一次扫描，但是究竟扫描多少数据存储块呢，这个并不是说数据库中有多少数据，Oracle就扫描这么大的数据块，而是Oracle会扫描高水位线以下的数据块。现在来想象一下，如果刚才是一张刚刚建立的空表，你进行了一次Select操作，那么由于高水位线HWM在最低的0位置上，所以没有数据块需要被扫描，扫描时间会极短。而如果这个时候你首先插入了一千万条数据，然后再用delete语句删除这一千万条数据。由于插入了一千万条数据，所以这个时候的高水位线就在一千万条数据这里。后来删除这一千万条数据的时候，由于delete语句不影响高水位线，所以高水位线依然在一千万条数据这里。这个时候再一次用select语句进行扫描，虽然这个时候表中没有数据，但是由于扫描是按照高水位线来的，所以需要把一千万条数据的存储空间都要扫描一次，也就是说这次扫描所需要的时间和扫描一千万条数据所需要的时间是一样多的。所以有时候有人总是经常说，怎么我的表中没有几条数据，但是还是这么慢呢，这个时候其实奥秘就是这里的高水位线了。</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那有没有办法让高水位线下降呢，其实有一种比较简单的方法，那就是采用TRUNCATE语句进行删除数据。采用TRUNCATE语句删除一个表的数据的时候，类似于重新建立了表，不仅把数据都删除了，还把HWM给清空恢复为0。所以如果需要把表清空，在有可能利用TRUNCATE语句来删除数据的时候就利用TRUNCATE语句来删除表，特别是那种数据量有可能很大的临时存储表。</p>
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在手动段空间管理（Manual Segment Space Management）中，段中只有一个HWM，但是在Oracle9iRelease1才添加的自动段空间管理（Automatic Segment Space Management）中，又有了一个低HWM的概念出来。为什么有了HWM还又有一个低HWM呢，这个是因为自动段空间管理的特性造成的。在手段段空间管理中，当数据插入以后，如果是插入到新的数据块中，数据块就会被自动格式化等待数据访问。而在自动段空间管理中，数据插入到新的数据块以后，数据块并没有被格式化，而是在第一次在第一次访问这个数据块的时候才格式化这个块。所以我们又需要一条水位线，用来标示已经被格式化的块。这条水位线就叫做低HWM。一般来说，低HWM肯定是低于等于HWM的。</p>
<img src ="http://www.blogjava.net/orangehf/aggbug/346959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-03-24 16:12 <a href="http://www.blogjava.net/orangehf/archive/2011/03/24/346959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle中，什么是Rollback Segments？</title><link>http://www.blogjava.net/orangehf/archive/2011/03/24/346955.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Thu, 24 Mar 2011 08:03:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/03/24/346955.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/346955.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/03/24/346955.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/346955.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/346955.html</trackback:ping><description><![CDATA[<p>Rollback Segments是在你数据库中的一些存储空间，它用来临时的保存当数据库数据发生改变时的先前值，<br />
Rollback Segment主要有两个目的：<br />
<br />
1. 如果因为某种原因或者其他用用户想要通过ROLLBACK声明来取消一个人的数据操作，数据就会复原到之前为改变时的值。这种情况只在transaction的过程中有效，如果用户执行了COMMIT命令，那么ROLLBACK SEGMENT里面的值就会标识为失效的，数据改变就将永久化。<br />
<br />
2. 另一个目的是当有并发的session访问了一个数据值改变但事务还没有提交的表。如果一个SELECT语句开始读取一个表同时一个事务也在修改这个表的值，那么修改前的值就会保存到rollback segment里面，SELECT语句也是从ROLLBACK SEGMENT里面读取表的值。 </p>
<p>&nbsp;</p>
 <img src ="http://www.blogjava.net/orangehf/aggbug/346955.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-03-24 16:03 <a href="http://www.blogjava.net/orangehf/archive/2011/03/24/346955.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java与.net平台之间进行RSA加密验证</title><link>http://www.blogjava.net/orangehf/archive/2011/02/26/345243.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Sat, 26 Feb 2011 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/02/26/345243.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/345243.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/02/26/345243.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/345243.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/345243.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: RSA加密算法虽然不分平台，标准都是一样的，但是各个平台的实现方式都不尽相同，下面来我来说说java与.net平台之间该如何进行RSA加密验证，即java端加密-》.net端验证和.net端加密-》java端验证。我对RSA算法也只是停留在应用的层面，所以我就以应用的角度来说说这个过程。首先，我们来看一下java端的私钥和公钥的样子：私钥：MIICeQIBADANBgk...&nbsp;&nbsp;<a href='http://www.blogjava.net/orangehf/archive/2011/02/26/345243.html'>阅读全文</a><img src ="http://www.blogjava.net/orangehf/aggbug/345243.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-02-26 17:00 <a href="http://www.blogjava.net/orangehf/archive/2011/02/26/345243.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下使用crond定时执行kettle的job</title><link>http://www.blogjava.net/orangehf/archive/2011/02/11/344045.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Fri, 11 Feb 2011 04:13:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2011/02/11/344045.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/344045.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2011/02/11/344045.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/344045.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/344045.html</trackback:ping><description><![CDATA[<p>由于第一次碰linux，对其不是很了解，导致这个问题困扰了我近一个月的时间，现在终于解决了，分享给大家。<br />
&nbsp;<br />
<strong><span style="color: #0000ff"><strong>首先，安装jre，配置java环境变量<br />
&nbsp; <br />
</strong></span></strong><strong>(一)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></strong><strong><span style="font-family: 宋体">下载</span>jre-6u23-linux-x64.bin</strong></p>
<p style="text-align: left; text-indent: 0cm; margin-left: 21pt" class="MsoListParagraph" align="left"><span style="font-family: 宋体">下载地址：</span>http://cds-esd.sun.com/ESD6/JSCDL/jdk/6u23-b05/jre-6u23-linux-x64.bin?AuthParam=1292401739_2abc6c61c57eec5b100fe647086d1f33&amp;TicketId=CJ0nhpzNkjGGwpbkW40LAgA%3D&amp;GroupName=CDS&amp;FilePath=/ESD6/JSCDL/jdk/6u23-b05/jre-6u23-linux-x64.bin&amp;File=jre-6u23-linux-x64.bin</p>
<p style="text-align: left; text-indent: -21pt; margin-left: 21pt" class="MsoListParagraph" align="left">(二)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span><strong><span style="font-family: 宋体">安装</span>jre-6u23-linux-x64.bin</strong></p>
<p style="text-align: left" class="MsoNormal" align="left">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 宋体">将</span>jre-6u23-linux-x64.bin<span style="font-family: 宋体">上传到</span>linux<span style="font-family: 宋体">服务器</span></p>
<p style="text-align: left; text-indent: -18pt; margin-left: 36pt; tab-stops: list 36.0pt" class="MsoNormal" align="left"><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: #333333; font-size: 9pt">在终端上，键入：</span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"><br />
<strong>su</strong></span></p>
<p style="text-align: left; text-indent: -18pt; margin-left: 36pt; tab-stops: list 36.0pt" class="MsoNormal" align="left"><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: #333333; font-size: 9pt">输入超级用户口令。</span></p>
<p style="text-align: left; text-indent: -18pt; margin-left: 36pt; tab-stops: list 36.0pt" class="MsoNormal" align="left"><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: #333333; font-size: 9pt">切换到所需的安装目录。类型：</span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"><br />
<strong>cd &lt;</strong></span><strong><span style="font-family: 宋体; color: #333333; font-size: 9pt">目录路径名</span></strong><strong><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt">&gt;</span></strong><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"><br />
</span><span style="font-family: 宋体; color: #333333; font-size: 9pt">例如，要在</span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"> /usr/java/ </span><span style="font-family: 宋体; color: #333333; font-size: 9pt">目录中安装软件，请键入：</span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"><br />
<strong>cd /usr/java/</strong><br />
<br />
</span><strong><em><span style="font-family: 宋体; color: #333333; font-size: 9pt">关于超级用户访问权限的说明：</span></em></strong><em><span style="font-family: 宋体; color: #333333; font-size: 9pt">要将</span></em><em><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"> JRE </span></em><em><span style="font-family: 宋体; color: #333333; font-size: 9pt">安装在系统级位置（例如</span></em><em><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"> /usr/local</span></em><em><span style="font-family: 宋体; color: #333333; font-size: 9pt">），必须以超级用户身份登录，从而获得必要的权限。如果您不具有超级用户访问权限，请将</span></em><em><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"> JRE </span></em><em><span style="font-family: 宋体; color: #333333; font-size: 9pt">安装在您的主目录中，或者安装在您具有写入权限的子目录中。</span></em></p>
<p style="text-align: left; text-indent: -18pt; margin-left: 36pt; tab-stops: list 36.0pt" class="MsoNormal" align="left"><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: #333333; font-size: 9pt">将您下载的文件的权限更改为可执行。类型：</span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"><br />
<strong>chmod a+x jre-6u23-linux-x64.bin</strong></span></p>
<p style="text-align: left; text-indent: -18pt; margin-left: 36pt; tab-stops: list 36.0pt" class="MsoNormal" align="left"><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt">5.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;</span></span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 宋体; color: #333333; font-size: 9pt">启动安装过程。键入：</span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"><br />
<strong>./ jre-6u23-linux-x64.bin</strong><br />
<br />
</span><span style="font-family: 宋体; color: #333333; font-size: 9pt">此时将显示二进制许可协议。通读许可协议。按空格键显示下一页。读完许可协议后，输入</span><strong><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"> yes </span></strong><span style="font-family: 宋体; color: #333333; font-size: 9pt">继续安装<strong>（此步骤可能直接跳过）</strong>。</span></p>
<p style="text-align: left; text-indent: -18pt; margin-left: 36pt; tab-stops: list 36.0pt" class="MsoNormal" align="left"><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt">7.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt">JRE </span><span style="font-family: 宋体; color: #333333; font-size: 9pt">安装在其自身的目录中。在本例中，它将安装在</span><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"> <strong>/usr/java/ jre1.6.0_23</strong></span><span style="font-family: 宋体; color: #333333; font-size: 9pt">目录中。当安装完成时，您将看到</span><strong><span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"> Done</span></strong><strong><span style="font-family: 宋体; color: #333333; font-size: 9pt">（完成）</span></strong><span style="font-family: 宋体; color: #333333; font-size: 9pt">字样。<br />
<br />
</span></p>
<span style="font-family: 'Helvetica', 'sans-serif'; color: #333333; font-size: 9pt"><span style="font: 7pt 'Times New Roman'">&nbsp;</span></span><strong>(三)<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></strong><strong><span style="font-family: 宋体">配置</span>java</strong><strong><span style="font-family: 宋体">环境变量<br />
</span></strong>
<p style="text-indent: -21pt; background: white; margin-left: 42pt"><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-size: 10pt">命令行键入&#8220;</span><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">cd /etc</span><span style="color: black; font-size: 10pt">&#8221;</span><span style="color: black; font-size: 10pt">进入</span><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">etc</span><span style="color: black; font-size: 10pt">目录</span></p>
<p style="text-indent: -21pt; background: white; margin-left: 42pt"><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-size: 10pt">命令行键入&#8220;</span><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">vi profile</span><span style="color: black; font-size: 10pt">&#8221;</span><span style="color: black; font-size: 10pt">打开</span><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">profile</span><span style="color: black; font-size: 10pt">文件</span></p>
<p style="text-indent: -21pt; background: white; margin-left: 42pt"><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-size: 10pt">敲击键盘</span><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">ctrl+F</span><span style="color: black; font-size: 10pt">到文件末尾<br />
</span></p>
<p style="text-indent: -21pt; background: white; margin-left: 42pt"><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-size: 10pt">在末尾处，即第一个</span><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">~</span><span style="color: black; font-size: 10pt">的地方，敲击键盘将以下内容输入到文件<br />
</span></p>
<blockquote style="margin-right: 0px" dir="ltr">
<p style="background: white"><span style="font-family: 'Verdana', 'sans-serif'; background: silver; color: black; font-size: 10pt">JAVA_HOME=/usr/java/jre1.6.0_23</span></p>
<p style="background: white"><span style="font-family: 'Verdana', 'sans-serif'; background: silver; color: black; font-size: 10pt">PATH=$JAVA_HOME/bin:$PATH</span></p>
<p style="background: white"><span style="font-family: 'Verdana', 'sans-serif'; background: silver; color: black; font-size: 10pt">CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar</span></p>
<p style="background: white"><span style="font-family: 'Verdana', 'sans-serif'; background: silver; color: black; font-size: 10pt">export JAVA_HOME</span></p>
<p style="background: white"><span style="font-family: 'Verdana', 'sans-serif'; background: silver; color: black; font-size: 10pt">export PATH</span></p>
<p style="background: white"><span style="font-family: 'Verdana', 'sans-serif'; background: silver; color: black; font-size: 10pt">export CLASSPATH</span></p>
</blockquote>
<p dir="ltr"><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; 5.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="color: black; font-size: 10pt">键盘敲击</span><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">exc</span><span style="color: black; font-size: 10pt">，命令行键入&#8220;</span><span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">:wq</span><span style="color: black; font-size: 10pt">&#8221;，保存文件；<br />
<br />
<span style="font-family: 'Verdana', 'sans-serif'; color: black; font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp; 6.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp; </span></span>重新登录linux，在命令行键入&#8220;java&#8221;，如果出现帮助信息则表示配置成功。</span></p>
<p><br />
<strong><span style="color: #0000ff"><strong>然后，部署kettle<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span></strong><span>1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">将</span>pdi-ce-4.1.0-stable.zip<span style="font-family: 宋体">上传到</span>linux<span style="font-family: 宋体">服务器</span></span></p>
<p style="text-align: left; text-indent: -21pt; margin-left: 42pt" class="MsoListParagraph" align="left"><span>2.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">使用</span>unzip<span style="font-family: 宋体">命令解压</span>pdi-ce-4.1.0-stable.zip<br />
</span><span>unzip pdi-ce-4.1.0-stable.zip -d "/mnt/kettle"</span></p>
<p style="text-align: left; text-indent: -21pt; margin-left: 42pt" class="MsoListParagraph" align="left"><span>3.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">赋予解压目录下</span>.sh<span style="font-family: 宋体">文件的执行权力</span></span></p>
<p style="text-align: left; text-indent: 0cm; margin-left: 42pt" class="MsoListParagraph" align="left"><span>chmod +x *.sh</span></p>
<p style="text-align: left; text-indent: -21pt; margin-left: 42pt" class="MsoListParagraph" align="left"><span>4.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">进入解压目录，键入&#8220;</span>./kitchen.sh<span style="font-family: 宋体">&#8221;回车，如果有帮助信息则表示</span>kettle<span style="font-family: 宋体">环境部署成功</span></span></p>
<p><br />
<strong style="color: #3366ff">※（重点）接着，编写执行kettle任务的shell脚本<br />
<br />
</strong>创建test.sh，将以下内容复制粘贴到里面，然后键入&#8220;chmod +x&nbsp;/mnt/kettle/*.sh&#8221;，赋予test.sh执行权限。</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #ff0000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />export&nbsp;JAVA_HOME=/usr/java/jre1.6.0_23<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />export&nbsp;PATH=$JAVA_HOME/bin:$PATH<br />
<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" />export&nbsp;CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar<br />
</span><span style="color: #000000"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span><span style="color: #000000">/</span><span style="color: #000000">mnt</span><span style="color: #000000">/</span><span style="color: #000000">kettle</span><span style="color: #000000">/</span><span style="color: #000000">data</span><span style="color: #000000">-</span><span style="color: #000000">integration</span><span style="color: #000000">/</span><span style="color: #000000">kitchen.sh&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">file</span><span style="color: #000000">=/</span><span style="color: #000000">mnt</span><span style="color: #000000">/</span><span style="color: #000000">kettle</span><span style="color: #000000">/</span><span style="color: #000000">test.kjb&nbsp;</span><span style="color: #000000">&gt;</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">mnt</span><span style="color: #000000">/</span><span style="color: #000000">kettle</span><span style="color: #000000">/</span><span style="color: #000000">display.txt<img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /></span></div>
<p><br />
说明：<br />
<span style="color: #ff0000">前3行，设置java环境变量的语句必不可少，<br />
因为crond是个守护进程，它不归属于任何用户，虽然之前以root身份配置了java的环境变量，但是crond一样找不到java命令，<br />
所以，当crond执行kettle任务时，需要动态设置java环境变量，crond才能找到java命令。</span></p>
<font style="color: #000000" color="#ff0000"><br />
<span style="color: #3366ff"><strong>最后，使用crontab命令添加定时任务<br />
<br />
</strong><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.在终端上，键入&#8220;crontab -e&#8221;，进入定时任务文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.键入&#8220;a&#8221;，对文件进行编辑<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 输入如下内容：&nbsp;
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img alt="" align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" /><span style="color: #000000">23</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">11</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">10</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">02</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">mnt</span><span style="color: #000000">/</span><span style="color: #000000">kettle</span><span style="color: #000000">/</span><span style="color: #000000">test.sh</span></div>
</span></span></font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中 23为分钟，11为小时，10为日，02为月，*为星期几，crontab命令的使用这里不再赘述。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.键盘敲击exc，终端键入&#8220;:wq&#8221;，保存文件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.重启crond服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 键入&#8220;cd /etc/init.d&#8221;，进入该目录<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 键入&#8220;./crond restart&#8221;，重启crond服务<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.等待执行结果<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.执行成功，oh..nice! 
<img src ="http://www.blogjava.net/orangehf/aggbug/344045.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2011-02-11 12:13 <a href="http://www.blogjava.net/orangehf/archive/2011/02/11/344045.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c# 正则表达式 group 高级用法</title><link>http://www.blogjava.net/orangehf/archive/2009/11/11/301958.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Wed, 11 Nov 2009 05:40:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2009/11/11/301958.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/301958.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2009/11/11/301958.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/301958.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/301958.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080">&nbsp;1</span><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">string</span><span style="color: #000000">&nbsp;strText&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">中国河北省石家庄市</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;要使用key的功能，需要这样写?&lt;prov&gt;（"?"必须加），"prov"为key名称</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Regex&nbsp;oRegex&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Regex(</span><span style="color: #000000">@"</span><span style="color: #000000">(中国)*(?&lt;prov&gt;.+省)(?&lt;city&gt;.+市)</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MatchCollection&nbsp;oMatchCollection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;oRegex.Matches(strText);<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">foreach</span><span style="color: #000000">&nbsp;(Match&nbsp;oMatch&nbsp;</span><span style="color: #0000ff">in</span><span style="color: #000000">&nbsp;oMatchCollection)<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img id="Codehighlighter1_314_456_Open_Image" onclick="this.style.display='none'; Codehighlighter1_314_456_Open_Text.style.display='none'; Codehighlighter1_314_456_Closed_Image.style.display='inline'; Codehighlighter1_314_456_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_314_456_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_314_456_Closed_Text.style.display='none'; Codehighlighter1_314_456_Open_Image.style.display='inline'; Codehighlighter1_314_456_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_314_456_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_314_456_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;取值的时候就用正则表达式里的key取值</span><span style="color: #008000"><br />
</span><span style="color: #008080">10</span><span style="color: #008000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox.Show(oMatch.Groups[</span><span style="color: #000000">"</span><span style="color: #000000">prov</span><span style="color: #000000">"</span><span style="color: #000000">]&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">----</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;oMatch.Groups[</span><span style="color: #000000">"</span><span style="color: #000000">city</span><span style="color: #000000">"</span><span style="color: #000000">]);<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span></div>
<span style="color: red"><strong>很好用！强力推荐！</strong></span>
<img src ="http://www.blogjava.net/orangehf/aggbug/301958.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2009-11-11 13:40 <a href="http://www.blogjava.net/orangehf/archive/2009/11/11/301958.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>An Introduction in MSMQ(Microsoft Message Queue)</title><link>http://www.blogjava.net/orangehf/archive/2009/04/11/265041.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Sat, 11 Apr 2009 11:34:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2009/04/11/265041.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/265041.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2009/04/11/265041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/265041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/265041.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: October 27, 2004 Programs, particularly those in the enterprise, cannot stand alone any longer. Whether needing to exchange data or provide some kind of service-like behavior in a centralized (or di...&nbsp;&nbsp;<a href='http://www.blogjava.net/orangehf/archive/2009/04/11/265041.html'>阅读全文</a><img src ="http://www.blogjava.net/orangehf/aggbug/265041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2009-04-11 19:34 <a href="http://www.blogjava.net/orangehf/archive/2009/04/11/265041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小游戏--贪食蛇--C#--源代码</title><link>http://www.blogjava.net/orangehf/archive/2008/10/05/232524.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Sun, 05 Oct 2008 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2008/10/05/232524.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/232524.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2008/10/05/232524.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/232524.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/232524.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;好不容易有个十一长假，终于可以编点自己喜欢的东西了，由于公司主要用的是C#，我也就入乡随俗了，拿C#写了个小游戏练练手，以后有时间再用JAVA重写一遍。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这只是初版，如果有BUG的话，大家尽量提出来噢，我会尽力改的，不会改的就得请教各位高手咯！<br />
我同时也希望可以帮助像我一样的初学者能更上一层楼&nbsp;。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还有一个我不解的问题，希望高手赐教。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff6600">当我在Visual Studio 2005里点运行按钮时，游戏运行会很卡，很占CPU，而且源代码目录下会生成一大堆.TMP文件；但是，我直接双击DEBUG文件夹下编译好的.exe文件，游戏运行正常，CPU占用率很低</span><span style="color: #ff6600">。<br />
</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;谁能告诉我为什么？先谢谢啦！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下是可执行文件及源代码的下载<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/Files/orangehf/MySnake.rar">MySnake</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;08.10.05<br />
<hr />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天修复了一个BUG，即在定时器每次时间间隔中，可以改变N次蛇的移动方向，只要按的够快。这样就产生了一个问题，比如说，蛇正在向右移动，用很快的手速依次按下"&#8595;"键和"&#8592;"键，当按下"&#8595;"键时，蛇实际并没有移动（每次时间间隔只能移动一次），但移动方向已改变为下，这时可以按下"&#8592;"键的条件为真，按下"&#8592;"键后在界面显示蛇还未移动的情况下，就GAME OVER了（即蛇头撞到了蛇身）。<br />
<p><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我在原有基础上加了个BOOL变量canChangeDirection，来控制在定时器每次时间间隔中，只能改变一次蛇的移动方向，这样就修复了以上BUG。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下为1.01版本的可执行文件及源代码的下载<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/Files/orangehf/MySnake_v1.01.rar">MySnake_v1.01</a></p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 08.10.12<br />
&nbsp;
<hr />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天又修改了两个地方，这都要多亏<a id="AjaxHolder_Comments_CommentList_ctl02_NameLink" href="http://fera.cublog.cn/" target="_blank">raof01</a> 给我提的两个很好的建议。在这里要好好谢谢他！<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.原来蛇身移动的算法效率不高，我的做法是先将移动前的整个蛇身坐标复制一遍，然后再进行移动时的赋值；其实只要复制当前Tile的前一个Tile的坐标即可，详情请见v1.02版的代码。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.在v1.01版中，不支持在每个时间间隔内玩家多次的键盘输入，即每个时间间隔内只接受玩家的第一次输入，其实这样很不人性化，通过<a id="AjaxHolder_Comments_CommentList_ctl02_NameLink" href="http://fera.cublog.cn/" target="_blank">raof01</a>&nbsp;的指点，我在v1.02版中添加了一个保存蛇的移动方向的队列，存储用户的输入，这样玩家想按多快都可以了，他按的都会被处理，按照队列的顺序依次改变蛇的移动方向，不过每个时间间隔依然只能改变一次移动方向。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以下为1.02版本的可执行文件及源代码的下载<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="/Files/orangehf/MySnake_v1.02.rar">MySnake_v1.02</a><a href="/Files/orangehf/MySnake_v1.02.rar"><br />
</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;08.10.18<br />
 <img src ="http://www.blogjava.net/orangehf/aggbug/232524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2008-10-05 16:16 <a href="http://www.blogjava.net/orangehf/archive/2008/10/05/232524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>strictfp关键字具体有什么用处呢?</title><link>http://www.blogjava.net/orangehf/archive/2007/10/21/154679.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Sun, 21 Oct 2007 05:05:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2007/10/21/154679.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/154679.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2007/10/21/154679.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/154679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/154679.html</trackback:ping><description><![CDATA[今天突然才知道java里有个strictfp关键字,网上查阅了下资料,<br />
<br />
了解了strictfp的意思是FP-strict，也就是说精确浮点的意思.当一个class或interface用strictfp声明，内部所有的float和double表达式都会成为strictfp的,符合IEEE-754规范.<br />
<br />
还说如果你想让你的浮点运算更加精确，而且不会因为不同的硬件平台所执行的结果不一致的话，那就请用关键字strictfp.<br />
<br />
但我试验了一下,即使给类加了strictfp关键字,还是得不到精确结果啊..<br />
<br />
代码如下:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_35_267_Open_Image" onclick="this.style.display='none'; Codehighlighter1_35_267_Open_Text.style.display='none'; Codehighlighter1_35_267_Closed_Image.style.display='inline'; Codehighlighter1_35_267_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_35_267_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_35_267_Closed_Text.style.display='none'; Codehighlighter1_35_267_Open_Image.style.display='inline'; Codehighlighter1_35_267_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">strictfp</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestStrictfp&nbsp;</span><span id="Codehighlighter1_35_267_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_35_267_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_39_62_Open_Image" onclick="this.style.display='none'; Codehighlighter1_39_62_Open_Text.style.display='none'; Codehighlighter1_39_62_Closed_Image.style.display='inline'; Codehighlighter1_39_62_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_39_62_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_39_62_Closed_Text.style.display='none'; Codehighlighter1_39_62_Open_Image.style.display='inline'; Codehighlighter1_39_62_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_39_62_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**&nbsp;*/</span><span id="Codehighlighter1_39_62_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080">@param</span><span style="color: #008000">&nbsp;args<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_105_264_Open_Image" onclick="this.style.display='none'; Codehighlighter1_105_264_Open_Text.style.display='none'; Codehighlighter1_105_264_Closed_Image.style.display='inline'; Codehighlighter1_105_264_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_105_264_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_105_264_Closed_Text.style.display='none'; Codehighlighter1_105_264_Open_Image.style.display='inline'; Codehighlighter1_105_264_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_105_264_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_105_264_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">float</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">float</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">1.03</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">float</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">float</span><span style="color: #000000">)&nbsp;.</span><span style="color: #000000">42</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1.03</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;d&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;.</span><span style="color: #000000">42</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(a&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;b);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(c&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;d);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
请问strictfp关键字到底用在什么地方呢?最好给个实例哈~<br />
<br />
   <img src ="http://www.blogjava.net/orangehf/aggbug/154679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2007-10-21 13:05 <a href="http://www.blogjava.net/orangehf/archive/2007/10/21/154679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>二进制与任意字符互转小程序</title><link>http://www.blogjava.net/orangehf/archive/2007/10/18/153810.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Thu, 18 Oct 2007 03:42:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2007/10/18/153810.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/153810.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2007/10/18/153810.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/153810.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/153810.html</trackback:ping><description><![CDATA[貌似在昨天,偶看了<a id="AjaxHolder_Comments_CommentList_ctl01_NameLink" href="http://www.blogjava.net/hmilyld/" target="_blank">Hmilyld</a>博里的一篇日志叫汉字转换为二进制的小工具,一个很不错的工具!<br />
看着看着,偶就手痒了,于是我也写了一个二进制与任意字符互转小程序,8过米界面哈!<br />
代码很少<br />
<br />
源代码如下: <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000"><br />
<img id="Codehighlighter1_28_2191_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_2191_Open_Text.style.display='none'; Codehighlighter1_28_2191_Closed_Image.style.display='inline'; Codehighlighter1_28_2191_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_28_2191_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_28_2191_Closed_Text.style.display='none'; Codehighlighter1_28_2191_Open_Image.style.display='inline'; Codehighlighter1_28_2191_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;StrBinaryTurn&nbsp;</span><span id="Codehighlighter1_28_2191_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_28_2191_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将字符串转换成二进制字符串，以空格相隔</span><span style="color: #008000"><br />
<img id="Codehighlighter1_88_277_Open_Image" onclick="this.style.display='none'; Codehighlighter1_88_277_Open_Text.style.display='none'; Codehighlighter1_88_277_Closed_Image.style.display='inline'; Codehighlighter1_88_277_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_88_277_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_88_277_Closed_Text.style.display='none'; Codehighlighter1_88_277_Open_Image.style.display='inline'; Codehighlighter1_88_277_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;toBinary(String&nbsp;str)</span><span id="Codehighlighter1_88_277_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_88_277_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;strChar&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;str.toCharArray();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">""</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_191_254_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_254_Open_Text.style.display='none'; Codehighlighter1_191_254_Closed_Image.style.display='inline'; Codehighlighter1_191_254_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_191_254_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_191_254_Closed_Text.style.display='none'; Codehighlighter1_191_254_Open_Image.style.display='inline'; Codehighlighter1_191_254_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;strChar.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_191_254_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_191_254_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;Integer.toBinaryString(strChar[i])&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将二进制字符串转换成Unicode字符串</span><span style="color: #008000"><br />
<img id="Codehighlighter1_338_550_Open_Image" onclick="this.style.display='none'; Codehighlighter1_338_550_Open_Text.style.display='none'; Codehighlighter1_338_550_Closed_Image.style.display='inline'; Codehighlighter1_338_550_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_338_550_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_338_550_Closed_Text.style.display='none'; Codehighlighter1_338_550_Open_Image.style.display='inline'; Codehighlighter1_338_550_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;String&nbsp;toStr(String&nbsp;binStr)</span><span id="Codehighlighter1_338_550_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_338_550_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;tempStr&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;StrToStrArray(binStr);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;tempChar&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[tempStr.length];<br />
<img id="Codehighlighter1_471_512_Open_Image" onclick="this.style.display='none'; Codehighlighter1_471_512_Open_Text.style.display='none'; Codehighlighter1_471_512_Closed_Image.style.display='inline'; Codehighlighter1_471_512_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_471_512_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_471_512_Closed_Text.style.display='none'; Codehighlighter1_471_512_Open_Image.style.display='inline'; Codehighlighter1_471_512_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;tempStr.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_471_512_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_471_512_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempChar[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;toChar(tempStr[i]);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;String.valueOf(tempChar);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将二进制字符串转换为char</span><span style="color: #008000"><br />
<img id="Codehighlighter1_605_780_Open_Image" onclick="this.style.display='none'; Codehighlighter1_605_780_Open_Text.style.display='none'; Codehighlighter1_605_780_Closed_Image.style.display='inline'; Codehighlighter1_605_780_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_605_780_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_605_780_Closed_Text.style.display='none'; Codehighlighter1_605_780_Open_Image.style.display='inline'; Codehighlighter1_605_780_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;toChar(String&nbsp;binStr)</span><span id="Codehighlighter1_605_780_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_605_780_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[]&nbsp;temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;binStrToIntArray(binStr);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;sum&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_704_752_Open_Image" onclick="this.style.display='none'; Codehighlighter1_704_752_Open_Text.style.display='none'; Codehighlighter1_704_752_Closed_Image.style.display='inline'; Codehighlighter1_704_752_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_704_752_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_704_752_Closed_Text.style.display='none'; Codehighlighter1_704_752_Open_Image.style.display='inline'; Codehighlighter1_704_752_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;temp.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_704_752_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_704_752_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;</span><span style="color: #000000">+=</span><span style="color: #000000">&nbsp;temp[temp.length&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;i]&nbsp;</span><span style="color: #000000">&lt;&lt;</span><span style="color: #000000">&nbsp;i;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">char</span><span style="color: #000000">)sum;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将初始二进制字符串转换成字符串数组，以空格相隔</span><span style="color: #008000"><br />
<img id="Codehighlighter1_852_880_Open_Image" onclick="this.style.display='none'; Codehighlighter1_852_880_Open_Text.style.display='none'; Codehighlighter1_852_880_Closed_Image.style.display='inline'; Codehighlighter1_852_880_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_852_880_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_852_880_Closed_Text.style.display='none'; Codehighlighter1_852_880_Open_Image.style.display='inline'; Codehighlighter1_852_880_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;String[]&nbsp;StrToStrArray(String&nbsp;str)</span><span id="Codehighlighter1_852_880_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_852_880_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;str.split(</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">将二进制字符串转换成int数组</span><span style="color: #008000"><br />
<img id="Codehighlighter1_950_1128_Open_Image" onclick="this.style.display='none'; Codehighlighter1_950_1128_Open_Text.style.display='none'; Codehighlighter1_950_1128_Closed_Image.style.display='inline'; Codehighlighter1_950_1128_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_950_1128_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_950_1128_Closed_Text.style.display='none'; Codehighlighter1_950_1128_Open_Image.style.display='inline'; Codehighlighter1_950_1128_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[]&nbsp;binStrToIntArray(String&nbsp;binStr)</span><span id="Codehighlighter1_950_1128_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_950_1128_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">[]&nbsp;temp&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;binStr.toCharArray();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[]&nbsp;result&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">[temp.length];<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1072_1105_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1072_1105_Open_Text.style.display='none'; Codehighlighter1_1072_1105_Closed_Image.style.display='inline'; Codehighlighter1_1072_1105_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1072_1105_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1072_1105_Closed_Text.style.display='none'; Codehighlighter1_1072_1105_Open_Image.style.display='inline'; Codehighlighter1_1072_1105_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;&nbsp;i&nbsp;</span><span style="color: #000000">&lt;</span><span style="color: #000000">&nbsp;temp.length;&nbsp;i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_1072_1105_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1072_1105_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result[i]&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;temp[i]&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">48</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;result;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_1171_2189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1171_2189_Open_Text.style.display='none'; Codehighlighter1_1171_2189_Closed_Image.style.display='inline'; Codehighlighter1_1171_2189_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1171_2189_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1171_2189_Closed_Text.style.display='none'; Codehighlighter1_1171_2189_Open_Image.style.display='inline'; Codehighlighter1_1171_2189_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)</span><span id="Codehighlighter1_1171_2189_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1171_2189_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StrBinaryTurn&nbsp;cTob&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;StrBinaryTurn();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cTob.toBinary(</span><span style="color: #000000">"</span><span style="color: #000000">橘子，好吃！aaa</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cTob.toBinary(</span><span style="color: #000000">"</span><span style="color: #000000">999111</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cTob.toBinary(</span><span style="color: #000000">"</span><span style="color: #000000">What&nbsp;a&nbsp;nice&nbsp;day!</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cTob.toBinary(</span><span style="color: #000000">"</span><span style="color: #000000">^@^&nbsp;-&nbsp;-!&nbsp;（）★</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cTob.toStr(</span><span style="color: #000000">"</span><span style="color: #000000">110101001011000&nbsp;101101101010000&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1111111100001100&nbsp;101100101111101&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">101010000000011&nbsp;1111111100000001&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1100001&nbsp;1100001&nbsp;1100001&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cTob.toStr(</span><span style="color: #000000">"</span><span style="color: #000000">111001&nbsp;111001&nbsp;111001&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">110001&nbsp;110001&nbsp;110001</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cTob.toStr(</span><span style="color: #000000">"</span><span style="color: #000000">1010111&nbsp;1101000&nbsp;1100001&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1110100&nbsp;100000&nbsp;1100001&nbsp;100000&nbsp;1101110&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1101001&nbsp;1100011&nbsp;1100101&nbsp;100000&nbsp;1100100&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1100001&nbsp;1111001&nbsp;100001&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(cTob.toStr(</span><span style="color: #000000">"</span><span style="color: #000000">1011110&nbsp;1000000&nbsp;1011110&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">100000&nbsp;101101&nbsp;100000&nbsp;101101&nbsp;100001&nbsp;100000&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">1111111100001000&nbsp;1111111100001001&nbsp;10011000000101&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
输出结果:<br />
<p>110101001011000 101101101010000 1111111100001100 101100101111101 101010000000011 1111111100000001 1100001 1100001 1100001 </p>
<p>111001 111001 111001 110001 110001 110001 </p>
<p>1010111 1101000 1100001 1110100 100000 1100001 100000 1101110 1101001 1100011 1100101 100000 1100100 1100001 1111001 100001 </p>
<p>1011110 1000000 1011110 100000 101101 100000 101101 100001 100000 1111111100001000 1111111100001001 10011000000101 </p>
<p><br />
橘子，好吃！aaa<br />
999111<br />
What a nice day!<br />
^@^ - -! （）★</p>
<br />
<br />
 <img src ="http://www.blogjava.net/orangehf/aggbug/153810.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2007-10-18 11:42 <a href="http://www.blogjava.net/orangehf/archive/2007/10/18/153810.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>my俄罗斯方块修正BUG和新功能!提供下载!</title><link>http://www.blogjava.net/orangehf/archive/2007/10/13/152576.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Sat, 13 Oct 2007 07:25:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2007/10/13/152576.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/152576.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2007/10/13/152576.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/152576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/152576.html</trackback:ping><description><![CDATA[最近一直在测试前些日子写的俄罗斯方块(SWT),发现了几个BUG(只能说我还比较菜,没设计好):<br />
<br />
<span style="color: #ff6600"><span style="color: #ff6600">1.</span></span>方块类Block的clear和draw方法由于两个线程(一个是主线程,一个是定时器线程)都要调用,而且之前我没做好线程的同步,所以会随机发生该擦除的方块没能及时擦除,或是两个小方块重合.<br />
<br />
修正方法:<br />
主线程是在方块的左移,右移,下移,变形,直降 即 moveLeft(),moveRight(),moveDown(),rotateClock(),fall() 这些方法中调用Block的clear和draw方法的,定时器线程是在线程活动时调用moveDown(),所以,moveDown()就成了临界区,不能保证被调用的顺序,所以需要使他们同步,要使他们同步,只需将他们都写到一个方法里,即 move(moveSuit type),并且将move方法同步,即加关键字synchronized即可.<br />
<br />
<span style="color: #ff6600"><span style="color: #ff6600">2.</span></span>还是线程没有同步造成的问题,在定时器线程活动时会判断方块是否能下落,如果能就下落,在主线程中,按"下"或空格也会执行前句所说的任务,但由于是两个线程各自判断方块是否能下落,所以判断是否能下落的方法和下移方法的调用顺序不能被保证,所以有时会发生这样的情况:按住下,方块有时会下落到超出面板一格,或是几个方块重合,即主线程判断方块不能下落,但定时器线程在主线程判断方块不能下落之前,判断方块可以下落,于是方块就多下落了一格,这个顺序为:定时线程判断可以下落 -&gt; 主线程判断不能下落 -&gt; 主线程不动 -&gt; 定时线程让方块下落 -&gt; 造成异常发生或方块重合现象.<br />
<br />
修正方法:<br />
在&nbsp;move(moveSuit type)方法的MOVEDOWN情况中,再一次判断方块是否能下落,move(moveSuit type)方法是同步的,所以可以很好的解决这个问题.<br />
<br />
1,2修正后代码如下:<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_21_78_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_78_Open_Text.style.display='none'; Codehighlighter1_21_78_Closed_Image.style.display='inline'; Codehighlighter1_21_78_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_21_78_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_21_78_Closed_Text.style.display='none'; Codehighlighter1_21_78_Open_Image.style.display='inline'; Codehighlighter1_21_78_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">enum</span><span style="color: #000000">&nbsp;MoveSuit&nbsp;</span><span id="Codehighlighter1_21_78_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_21_78_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVELEFT,<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVERIGHT,<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOVEDOWN,<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROTATE,<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FALL<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">移动方法,通过移动类型决定如何移动</span><span style="color: #008000"><br />
<img id="Codehighlighter1_172_478_Open_Image" onclick="this.style.display='none'; Codehighlighter1_172_478_Open_Text.style.display='none'; Codehighlighter1_172_478_Closed_Image.style.display='inline'; Codehighlighter1_172_478_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_172_478_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_172_478_Closed_Text.style.display='none'; Codehighlighter1_172_478_Open_Image.style.display='inline'; Codehighlighter1_172_478_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">synchronized</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;move(MoveSuit&nbsp;type,&nbsp;TetrisBoard&nbsp;tetrisBoard)</span><span id="Codehighlighter1_172_478_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_172_478_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_191_475_Open_Image" onclick="this.style.display='none'; Codehighlighter1_191_475_Open_Text.style.display='none'; Codehighlighter1_191_475_Closed_Image.style.display='inline'; Codehighlighter1_191_475_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_191_475_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_191_475_Closed_Text.style.display='none'; Codehighlighter1_191_475_Open_Image.style.display='inline'; Codehighlighter1_191_475_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">switch</span><span style="color: #000000">(type)</span><span id="Codehighlighter1_191_475_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_191_475_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;MOVELEFT:<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveLeft();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;MOVERIGHT:<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveRight();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;MOVEDOWN:<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(tetrisBoard.canMoveDown(</span><span style="color: #0000ff">this</span><span style="color: #000000">))<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;moveDown();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;ROTATE:<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clear();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rotateClock().draw();<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;FALL:<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fall(tetrisBoard);<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p><br />
<span style="color: #ff6600"><span style="color: #ff6600">3.</span></span>如果GameOver一次以后再TryAgain,游戏等级和方块下落间隔会在分数到达100分左右时突然变到刚才GameOver时的最高等级和方块下落间隔.<br />
<br />
修正方法:<br />
游戏等级和方块下落间隔都是通过消行总数判断的,之前我忘记再每次游戏开始时将消行总数设为0,所以只需要在TetrisBoard类中加一个setRemovedLines方法,在Game类中的startGame方法中调用setRemovedLines(0)即可.<br />
<br />
<span style="color: #ff6600"><span style="color: #ff6600">4.</span></span>每个小方块的边框原来我设为了白色,在两个大方块相临时会将其中一个大方块的一部分边框擦除,比较难看,如果把小方块长宽缩小一个象素,当两个大方块相临时,衔接处就会有两个边框,也不是很好看.<br />
<br />
修正方法:将边框颜色设为背景色黑色,这样边框被擦除也看不出来,两个大方块衔接处只有一个边框,可以两全其美.虽然这个方法不太好...<br />
<br />
<br />
BUG说完了,该说说<span style="color: #ff6600">新功能</span>了,呵呵~<br />
<br />
我又添加了一个可以记录并显示最好成绩信息的功能,玩游戏总得有个奔头么,嘿嘿!<br />
第一次玩游戏时,最高分为0,最高等级为1,创造者姓名为"Are you the winner?"<br />
当游戏gameover时,如果当前游戏分数大于最高分,就让玩家输入自己姓名,并将其和最高分数,等级加密后存入myTetris.dat.<br />
重新打开游戏时,会从myTetris.dat中读取信息并解密,并将最高分,最高等级和最高分创造者显示在游戏界面上<br />
<br />
最后添张图:<br />
<img height="650" alt="" src="http://www.blogjava.net/images/blogjava_net/orangehf/update.JPG" width="618" border="0" /><br />
<br />
最后把jar包和源代码放出来!希望大家给我留言,互相交流,嘿嘿!<br />
<span style="color: #cc99ff">以前忘说了,如果想让帮助正常显示的话,需要在和jar包同级目录下新建个文件夹叫pics,然后在里面放一个叫logo的图片.</span><br />
<a title="myTetris下载地址" href="/Files/orangehf/myTetris_beta_5.rar">myTetris下载地址</a><br />
谢谢大家对我的支持!</p>
<p><br />
&nbsp;</p>
 <img src ="http://www.blogjava.net/orangehf/aggbug/152576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2007-10-13 15:25 <a href="http://www.blogjava.net/orangehf/archive/2007/10/13/152576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TEA加密算法java版</title><link>http://www.blogjava.net/orangehf/archive/2007/10/12/152328.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Fri, 12 Oct 2007 06:04:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2007/10/12/152328.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/152328.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2007/10/12/152328.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/152328.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/152328.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;最近在修改我的俄罗斯方块的同时,又添加了一个显示并记录最好成绩的功能,需要将信息加密/解密,存入文件/读取文件,在我下铺(牛人啊!)的指点下,采用了TEA加密算法.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/orangehf/archive/2007/10/12/152328.html'>阅读全文</a><img src ="http://www.blogjava.net/orangehf/aggbug/152328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2007-10-12 14:04 <a href="http://www.blogjava.net/orangehf/archive/2007/10/12/152328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>要求精确答案就避免使用double和float</title><link>http://www.blogjava.net/orangehf/archive/2007/10/05/150490.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Fri, 05 Oct 2007 02:36:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2007/10/05/150490.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/150490.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2007/10/05/150490.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/150490.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/150490.html</trackback:ping><description><![CDATA[今天看Effective java中有这么一条"如果要求精确答案,请避免使用float和double".<br />
这可真让我大吃一惊!!我很不解,而且不是很相信.于是我写了两个个程序试验了下.<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_29_231_Open_Image" onclick="this.style.display='none'; Codehighlighter1_29_231_Open_Text.style.display='none'; Codehighlighter1_29_231_Closed_Image.style.display='inline'; Codehighlighter1_29_231_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_29_231_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_29_231_Closed_Text.style.display='none'; Codehighlighter1_29_231_Open_Image.style.display='inline'; Codehighlighter1_29_231_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestFloatDouble&nbsp;</span><span id="Codehighlighter1_29_231_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_29_231_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_72_228_Open_Image" onclick="this.style.display='none'; Codehighlighter1_72_228_Open_Text.style.display='none'; Codehighlighter1_72_228_Closed_Image.style.display='inline'; Codehighlighter1_72_228_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_72_228_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_72_228_Closed_Text.style.display='none'; Codehighlighter1_72_228_Open_Image.style.display='inline'; Codehighlighter1_72_228_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_72_228_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_72_228_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">float</span><span style="color: #000000">&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">float</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">1.03</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">float</span><span style="color: #000000">&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(</span><span style="color: #0000ff">float</span><span style="color: #000000">)&nbsp;.</span><span style="color: #000000">42</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;c&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1.03</span><span style="color: #000000">;<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">double</span><span style="color: #000000">&nbsp;d&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;.</span><span style="color: #000000">42</span><span style="color: #000000">;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(a&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">&nbsp;b);<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(c&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">&nbsp;d);<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
输出结果为<br />
0.43259996<br />
0.6100000000000001<br />
<br />
而正确结果应为<br />
0.4326<br />
0.61<br />
<br />
<br />
如果需要得到精确答案,那就用java.math里的BigDecimal吧,虽然效率相对低一点,但至少是正确的!!!<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.math.BigDecimal;<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img id="Codehighlighter1_58_269_Open_Image" onclick="this.style.display='none'; Codehighlighter1_58_269_Open_Text.style.display='none'; Codehighlighter1_58_269_Closed_Image.style.display='inline'; Codehighlighter1_58_269_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_58_269_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_58_269_Closed_Text.style.display='none'; Codehighlighter1_58_269_Open_Image.style.display='inline'; Codehighlighter1_58_269_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestBigDecimal&nbsp;</span><span id="Codehighlighter1_58_269_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_58_269_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_101_266_Open_Image" onclick="this.style.display='none'; Codehighlighter1_101_266_Open_Text.style.display='none'; Codehighlighter1_101_266_Closed_Image.style.display='inline'; Codehighlighter1_101_266_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_101_266_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_101_266_Closed_Text.style.display='none'; Codehighlighter1_101_266_Open_Image.style.display='inline'; Codehighlighter1_101_266_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span id="Codehighlighter1_101_266_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_101_266_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;a&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(</span><span style="color: #000000">"</span><span style="color: #000000">1.03</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BigDecimal&nbsp;b&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;BigDecimal(</span><span style="color: #000000">"</span><span style="color: #000000">.42</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(a.multiply(b));<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(a.subtract(b));<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
输出结果同样也是正确结果为<br />
0.4326<br />
0.61<br />
<br />
我就不会了,谁能告诉我这是为什么呢???????<br />
各位大虾们给偶指点下!!!
 <img src ="http://www.blogjava.net/orangehf/aggbug/150490.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2007-10-05 10:36 <a href="http://www.blogjava.net/orangehf/archive/2007/10/05/150490.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>my俄罗斯方块!</title><link>http://www.blogjava.net/orangehf/archive/2007/10/01/150025.html</link><dc:creator>翔南</dc:creator><author>翔南</author><pubDate>Mon, 01 Oct 2007 02:42:00 GMT</pubDate><guid>http://www.blogjava.net/orangehf/archive/2007/10/01/150025.html</guid><wfw:comment>http://www.blogjava.net/orangehf/comments/150025.html</wfw:comment><comments>http://www.blogjava.net/orangehf/archive/2007/10/01/150025.html#Feedback</comments><slash:comments>45</slash:comments><wfw:commentRss>http://www.blogjava.net/orangehf/comments/commentRss/150025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/orangehf/services/trackbacks/150025.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近用SWT编写了一个俄罗斯方块,也没什么扩展功能,就是标准的俄罗斯方块.以前没见有用SWT编的,于是<br />
俺就编了一个.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于本人水平有限(偶只是个刚大四的学生),算法或是实现不会很精妙,编的时候也没特别考虑效率,不过本人觉着还凑合吧 嘿嘿!~<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果有谁想要学习SWT编程或是想了解下俄罗斯方块该怎么写,那就留下你的邮箱吧,我会把源代码发给你,每天我至少会看一次博的噢.. -0-<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果我的代码或想法有什么缺点,请大家指出哈!<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 放几个截图:<br />
1-----------------------<br />
<img height="656" alt="" src="http://www.blogjava.net/images/blogjava_net/orangehf/tetris1.JPG" width="618" border="0" /><br />
<br />
2-------------------------<br />
<img height="657" alt="" src="http://www.blogjava.net/images/blogjava_net/orangehf/tetris2.JPG" width="616" border="0" /><br />
<br />
3------------------------------<br />
<img height="658" alt="" src="http://www.blogjava.net/images/blogjava_net/orangehf/tetris3.JPG" width="618" border="0" /><br />
<br />
4---------------------------------<br />
<img height="659" alt="" src="http://www.blogjava.net/images/blogjava_net/orangehf/tetris4.JPG" width="615" border="0" /><br />
<br />
5----------------------------<img height="656" alt="" src="http://www.blogjava.net/images/blogjava_net/orangehf/tetris5.JPG" width="616" border="0" /><br />
<br />
6----------------------------<img height="657" alt="" src="http://www.blogjava.net/images/blogjava_net/orangehf/tetris6.JPG" width="614" border="0" />
 <img src ="http://www.blogjava.net/orangehf/aggbug/150025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/orangehf/" target="_blank">翔南</a> 2007-10-01 10:42 <a href="http://www.blogjava.net/orangehf/archive/2007/10/01/150025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>