锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
綺鵑歊MI鈥斺擩ava涓嶦JB浼佷笟綰у簲鐢ㄥ紑鍙?/span>
Java™ RemoteMethodInvocation Specification
Java tutorial- RMI
2. 鍩虹鐭ヨ瘑
2.1 緗戠粶閫氫俊鍗忚
緗戠粶閫氫俊灞傛槸鍒嗗竷寮忚綆楃幆澧冧腑浣跨敤瀹㈡埛/鏈嶅姟鍣ㄧ粨鏋勭殑涓涓牳蹇冩妧鏈紝鑰岀綉緇滅紪紼嬩腑澶т綋鏈変袱縐嶉氫俊妯″紡錛屾棤榪炴帴鍜岄潰鍚戣繛鎺ョ殑鍗忚銆?/span>
UDP
UDP (universal datagram protocol)鏄竴縐嶇敤浜庢棤榪炴帴閫氫俊鐨勬爣鍑嗗寲鍗忚錛屽叾寤虹珛鍦↖P鍗忚涔嬩笂錛岃孖P鍗忚鏄痠nternet浣跨敤鐨勫熀鏈暟鎹紶杈撳崗璁俇DP鍗忚鐨勪富瑕佷綔鐢ㄦ槸灝嗙綉緇滄暟鎹祦閲忓帇緙╂垚鏁版嵁鎶ユ枃鐨勫艦寮忋備竴涓吀鍨嬬殑鏁版嵁鎶ユ枃灝辨槸涓涓簩榪涘埗鏁版嵁鐨勪紶杈撳崟浣嶃傛瘡涓涓暟鎹姤鐨勫墠8涓瓧鑺傜敤鏉ュ寘鍚姤澶翠俊鎭紝鍓╀綑瀛楄妭鍒欑敤鏉ュ寘鍚叿浣撶殑浼犺緭鏁版嵁銆俇DP鍗忚騫朵笉鎻愪緵鏁版嵁浼犻佺殑淇濊瘉鏈哄埗銆傚鏋滃湪浠庡彂閫佹柟鍒版帴鏀舵柟鐨勪紶閫掕繃紼嬩腑鍑虹幇鏁版嵁鎶ョ殑涓㈠け錛屽崗璁湰韜茍涓嶈兘鍋氬嚭浠諱綍媯嫻嬫垨鎻愮ず銆傚洜姝わ紝閫氬父浜轟滑鎶奤DP鍗忚縐頒負涓嶅彲闈犵殑浼犺緭鍗忚銆備竴鑸敤鏉ヤ紶杈撳皯閲忔暟鎹紝瀹冭祫婧愭秷鑰楀皬錛屽鐞嗛熷害蹇?/span>
TCP
TCP錛坱ransport control protocol錛変紶杈撴帶鍒跺崗璁紝鏍囧噯鍖栫殑闈㈠悜榪炴帴鐨勯氫俊鍗忚銆傚湪浣跨敤TCP鍗忚涓彂閫佽呭拰鎺ユ敹鑰呭繀欏誨湪閫氫俊涔嬪墠寤虹珛榪炴帴錛岃繛鎺ュ緩绔嬩箣鍚庤鐪嬫垚鏄竴涓暟鎹祦錛屽彂閫佽呭皢鏁版嵁鍙戝埌璇ユ暟鎹祦涓婏紝鎺ユ敹鑰呬粠璇ユ暟鎹祦涓婅鍙栨暟鎹傚鏋滄帴鏀惰呬篃鍚屾椂鏄彂閫佽呭垯榪炴帴鏄弻鍚戠殑銆傞氫俊瀹屾垚鍚庝換浣曚竴鏂歸兘鍙互鍏抽棴榪炴帴錛屼箣鍚庣殑璇誨啓鎿嶄綔閮戒細澶辮觸銆俆CP鍗忚鎻愪緵浜嗗彲闈犵殑闈㈠悜瀵硅薄鐨勬暟鎹祦浼犺緭鏈嶅姟鐨勮鍒欏拰綰﹀畾銆傜畝鍗曠殑璇村湪TCP妯″紡涓紝瀵規(guī)柟鍙戜竴涓暟鎹寘緇欎綘錛屼綘瑕佸彂涓涓‘璁ゆ暟鎹寘緇欏鏂廣侸ava鎻愪緵鐨勭被搴撻兘灝員CP/IP鍗忚鐨勪嬌鐢ㄥ熷姪濂楁帴瀛楋紙Socket錛夎繘琛屼簡鎶借薄銆傚鎺ュ瓧鍖呭惈浜嗗緩绔嬩笌榪滅▼涓繪満鐨勮繛鎺ワ紝涓庝富鏈鴻繘琛岄氫俊浠ュ強鍏抽棴榪炴帴鎵闇瑕佺殑鎵鏈夋搷浣滐紝鑰岃繖浜涙搷浣滃疄闄呬笂榪樻槸鐢盩CP/IP鏉ユ墽琛岀殑銆?/span>
緙栫粍
鍦ㄥ簲鐢ㄥ鏉傚挨鍏舵槸闈㈠悜瀵硅薄鐨勬椂鍊欙紝涓鏂歸潰浼氶亣鍒板鐞嗘暟鎹垨鑰呭璞$殑緇撴瀯鐨勯棶棰樸傚彟涓鏂歸潰榪樹細閬囧埌闈㈠悜嫻佺殑鐢ㄦ潵鍙戦佸瓧鑺傛垨瀛楃鍧楃殑緗戠粶榪炴帴闂銆傛鏃墮渶瑕佸皢瀵硅薄杞崲鎴愯繛鎺ュ彲浠ュ鐞嗙殑鏍煎紡錛屼粠鑰屼嬌鑷畾涔夌殑瀵硅薄鍙互閫氳繃榪炴帴綆¢亾銆?/span>
緙栫粍錛坢arshalling錛夋槸涓涓皢璐熻矗瀵硅薄杞崲鎴愬瓧鑺傛祦鐨勮繃紼嬶紝鐒跺悗鍦ㄤ嬌鐢ㄥ弽榪囩▼----鍙嶇紪緇勫皢瀛楄妭嫻佽漿鎹㈡垚瀵硅薄銆侸ava涓紪緇勭殑瀹炵幇鏂瑰紡鏄簭鍒楀寲錛坰erialization錛夈?br />
浠g悊
浠g悊鏄竴涓疄鐜扮粰瀹氭帴鍙g殑瀵硅薄錛屼絾鏄笉鐩存帴鎵ц涓浜涗唬鐮佽綆楃粨鏋滐紝鑰屾槸浠h〃鍏朵粬涓浜涘璞℃墽琛屽疄闄呰綆楃殑瀵硅薄銆?br />
浠g悊鍙互浠h〃鍏朵粬鐨勫簱鎴栬呮煇縐嶇被浼肩殑鍙互浠f浛瀹冩墽琛岀綉緇滈氫俊鐨勪笢瑗褲傝繖灝辨槸RMI宸ヤ綔鐨勫師鐞嗭紝浠g悊鍦≧MI涔熷嵆瀛樻牴錛圫tub錛夈?/span>
寮曠敤浣嶄簬鏈嶅姟鍣ㄤ腑鐨勫璞$殑浠g悊鏄浣曟瀯閫犵殑錛熷鎴風(fēng)涓嶈兘鏈変竴涓湡鐨凧ava寮曠敤錛屽洜涓篔ava寮曠敤鍙湪瀵硅薄浣嶄簬鍚屼竴涓狫VM鏃舵墠鑳芥甯稿伐浣溿傛瀯閫犵殑鍩烘湰鎬濇兂鏄負鏈嶅姟鍣ㄥ璞″垎閰嶄竴涓敮涓鐨勬爣璇嗗簭鍙鳳紝璇ュ簭鍙風(fēng)敱浠g悊淇濆瓨錛屾澶栬繕鏈夊璞℃墍鍦ㄧ殑涓繪満鍚嶃?/span>
瀹㈡埛濡備綍璇鋒眰浠g悊
鍦ㄨ幏鍙栦唬鐞嗘椂鎴戜滑闇瑕佷竴涓棿鎺ュ眰鎶婃墍鏈夌粏鑺傛娊璞★紝閫氳繃浣跨敤鍚嶅瓧鍘昏幏寰楀搴斿璞$殑鎬濇兂灝辨槸鍛藉悕銆傚懡鍚嶇殑涓涓富瑕佷綔鐢ㄦ槸閫氳繃浣跨敤瀵硅薄鐨勫悕瀛楋紝綆鍖栬幏寰楀璞$殑浠誨姟銆?/span>
瀵逛簬RMI鏉ヨ錛屾渶閫氱敤鐨勫懡鍚嶅疄鐜版椂RMI娉ㄥ唽錛屽畠鍏鋒湁bind鍜宭ookup鎿嶄綔錛屽浜庡懡鍚嶆湇鍔℃潵璇達紝瀹㈡埛绔叾瀹炲瓨鍦ㄤ竴涓畠鐨勪唬鐞嗐?/span>
鍛藉悕浣跨敤紺轟緥鍥?br />
涓.String瀵硅薄鐨勬瘮杈冿紝+鎿嶄綔鍜宨ntern鏂規(guī)硶
榪欓噷浠庝竴涓棶棰樺叆鎵嬫潵鐪嬬湅銆?br />
package testPackage;
public class Test {
public static void main(String[] args) {
String hello = "Hello", lo = "lo";
System.out.print((hello == "Hello") + " ");
System.out.print((Other.hello == hello) + " ");
System.out.print((other.Other.hello == hello) + " ");
System.out.print((hello == ("Hel" + "lo")) + " ");
System.out.print((hello == ("Hel" + lo)) + " ");
System.out.println(hello == ("Hel" + lo).intern());
}
}
class Other {
static String hello = "Hello";
}
package other;
public class Other {
static String hello = "Hello";
}
姝g‘絳旀錛歵rue true true true false true
涓昏瑕佺偣鏈夛細
1.鎵鏈夊唴瀹圭浉鍚岀殑String鎸囧悜鍚屼竴涓唴瀛樺潡銆備絾String瀵硅薄涓嶈兘鏄氳繃new鎿嶄綔鍒涘緩鍑烘潵銆備富瑕佸師鍥犳槸JVM瀵筍tring鍋氫簡浼樺寲錛孲tring鍔犺澆涔嬪悗浼氭寔鏈変竴涓父閲忔睜錛?br /> 鍙鍦ㄥ父閲忔睜涓壘鍒板唴瀹圭浉鍚岀殑String灝變細鎶婂叾寮曠敤榪斿洖銆傝宯ew鎿嶄綔鏄洿鎺ュ湪鍐呭瓨涓垎閰嶆柊絀洪棿銆?br />
2.Java涓湁涓ょ緇戝畾錛岄潤鎬佸拰鍔ㄦ併傚鏋?鎿嶄綔鐨勪袱杈規(guī)槸甯擱噺琛ㄨ揪寮忛偅涔堜細鍦ㄩ噰鐢ㄩ潤鎬佺粦瀹氾紝涔熷氨鏄緙栬瘧涔嬪悗鍊煎凡緇忓畾涓嬫潵浜嗐傝屽鏋滄湁涓杈規(guī)槸閫氳繃new鎿嶄綔鍒涘緩鍑?br /> 鏉ョ殑閭d箞浼氶噰鐢ㄥ姩鎬佺粦瀹氾紝鍙湁鍦ㄨ繍琛岀殑鏃跺欐墠鐭ラ亾鍏跺叿浣撶殑鍊箋?br /> 3.String鐨刬ntern鏂規(guī)硶浼氬埌甯擱噺姹犻噷闈㈡壘鏄惁鏈夌浉鍚屽唴瀹圭殑String錛屽鏋滄湁鍒欒繑鍥炲叾寮曠敤銆傚鏋滄病鏈夊垯鎶婅繖涓猄tring瀵硅薄娣誨姞鍒板父閲忔睜涔嬩腑騫舵斁鍥炲叾寮曠敤銆傞澶栬
涓嬶紝intern鍦ㄨ嫳鏂囦腑鏈変繚鐣欏尯鐨勬剰鎬濓紝榪欐牱濂界悊瑙e叾浣滅敤銆俰ntern鏂規(guī)硶榪樻槸native鐨勩?/pre>浜?String涓殑姝e垯琛ㄨ揪寮忎嬌鐢?/pre>
String涓湁浜涙柟娉曟槸闇瑕佹鍒欒〃杈懼紡浣滀負鍙傛暟鐨勩傝繖涓椂鍊欏氨瑕佷富瑕佷笉瑕佷紶閿欏弬鏁般傛渶鍏稿瀷鐨勪緥瀛愬氨鏄痳eplaceAll(String regex, String replacement)銆傜涓涓?br /> 鍙傛暟鏄渶瑕佹鍒欒〃杈懼紡鐨勶紝鑰岀浜屽弬鏁版槸鏅氱殑瀛楃涓層?/pre>String ss = "???";
ss = ss.replaceAll("?", "=");//榪愯鍒拌繖閲屼細鎶涘嚭PatternSyntaxException錛屽洜涓?#8220;?”鍦ㄦ鍒欒〃杈懼紡閲岄潰鏄壒孌婄鍙鳳紝闇瑕佽漿涔夈?/span>
ss = ss.replaceAll("[?]", "=");//姝g‘錛屾垜涓漢姣旇緝鍊懼悜浜庤繖縐嶅啓娉曘?/span>
ss = ss.replaceAll("\\?", "=");//姝g‘錛屽“?”鍋氳漿涔夈?/span>
鍥犳鍦ㄤ嬌鐢╯plit錛宺eplaceAll錛宺eplaceFirst絳夋柟娉曟椂瑕佺壒鍒敞鎰忔槸涓嶆槸闇瑕佽漿涔?
]]>
2. ThreadLocal綾伙紝瀹氫箟浜嗕竴涓彉閲忕殑鏈湴鍓湰錛屼笌鍘熸湁鍙橀噺闅旂錛屼綔鐢ㄧ被浼?/span>static鍙橀噺錛屽彧鏄笉鍏變韓銆傚彲鐢?/span>set娣誨姞鍙橀噺錛?/span>get鍘昏幏鍙栧彉閲忋傚彉閲忕被鍨嬩笉闄愬埗銆?/span>
3. Eclipse plug in寮鍙戜腑鍙互瀹炵幇IRuntimeClasspathProvider鎺ュ彛銆?/span>鍙互鎻愪緵鐢?/span>launch configuration鍘昏幏寰?/span>unresolved鍜?/span>resolved classpath銆傚紑鍙戜漢鍛樺彲浠ュ湪resolveClasspath鏂規(guī)硶涓姞鍏ヨ嚜瀹氫箟鐨?/span>classpath銆傚疄鐜扮被闇瑕佹敞鍐屽湪extension point涓?/span>
/**
*Computesandreturnsanunresolvedclasspathforthegivenlaunchconfiguration.
*Variableandcontainerentriesarenotresolved.
*
*@paramconfigurationlaunchconfiguration
*@returnunresolvedpath
*@exceptionCoreExceptionifunabletocomputeapath
*/
public IRuntimeClasspathEntry[] computeUnresolvedClasspath(ILaunchConfiguration configuration) throws CoreException;
/**
*Returnstheresolvedpathcorrespondingtothegivenpath,inthecontextofthe
*givenlaunchconfiguration.Variableandcontainerentriesareresolved.Thereturned
*(resolved)pathneednothavethesamenumberofentriesasthegiven(unresolved)
*path.
*
*@paramentriesentriestoresolve
*@paramconfigurationlaunchconfigurationcontexttoresolvein
*@returnresolvedpath
*@exceptionCoreExceptionifunabletoresolveapath
*/
public IRuntimeClasspathEntry[] resolveClasspath(IRuntimeClasspathEntry[] entries, ILaunchConfiguration configuration) throws CoreException;
A provider extension is defined in plugin.xml
. Following is an example definition of a runtime classpath provider extension.
<extension point="org.eclipse.jdt.launching.classpathProviders">
<classpathProvider
id="com.example.ExampleClasspathProvider"
class="com.example.ExampleClasspathProviderImpl"
</classpathProvider>
</extension>
4. plug in 寮鍙戜腑鍙互鐢?/span>JavaRuntime 鍘誨緱鍒拌繍琛岀幆澧冪殑淇℃伅銆?/span>
IRuntimeClasspathProvider provider = JavaRuntime.getClasspathProvider(configuration);
鍏朵腑configuration鏄?/span>ILaunchConfiguration綾誨瀷鐨勩?/span>
4. 鍦?/span>Eclipse plug in寮鍙戜腑鑾峰彇鏂囦歡銆備袱縐嶈В鍐沖姙娉曪細1.浠?/span>plug in瀹炰緥涓鍙栨枃浠剁殑URL錛岀劧鍚庣敤FileLocator鎶婅繖涓?/span>URL杞寲鎴愭枃浠惰礬寰勶紱2.鐩存帴鍒╃敤FileLocator鐨?/span>find鏂規(guī)硶銆?/span>
鏂規(guī)硶1
//filepath 鏄渶瑕佸畾浣嶇殑鏂囦歡
String filepath = "/bin/resources/test.jar";
//instance 鏄綋鍓?/span>plug in鐨勫疄渚?/span>
URL url = instance.getBundle().getEntry(filepath);
String path = null;
try {
path = FileLocator.resolve(url).getPath();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
returnnew Path(path);
}
鏂規(guī)硶2
String filepath = "/bin/resources/test.jar";
URL url = FileLocator.find(instance.getBundle(),new Path(filepath),null);
try {
path = FileLocator.resolve(url).getPath();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
5. 鍙互鍒╃敤JarOutputStream鏉ュ啓jar鍖呫傚繀欏諱負JarOutputStream 瀹炰緥鍒涘緩鑷沖皯涓涓?/span>Entry錛屽彲浠ヨ皟鐢?/span>putNextEntry鏂規(guī)硶銆?/span>
Manifest mf = new Manifest();
JarOutputStream jar = new JarOutputStream(new FileOutputStream("MainTest.jar")錛?/span>mf);
Properties properties = new Properties();
jar.putNextEntry(new ZipEntry("MainTest.property"));
properties.store(jar, "this is a test");
jar.close();
6. 寰楀埌IJavaModle
IJavaModel model = JavaCore.create(ResourcesPlugin.getWorkspace()
.getRoot());
IJavaProject[] projects = model.getJavaProjects();
IPackageFragmentRoot[] roots = projects[i] .getPackageFragmentRoots();
鐒跺悗鍙互渚濇寰楀埌瀵瑰簲elements
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO]
----------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:create] (aggregator-style)
[INFO]
----------------------------------------------------------------------------
銆傘傘傘傘傘傘?br />
[INFO] Velocimacro : initialization complete.
[INFO] Velocity successfully started.
[INFO] [archetype:create]
[INFO] Defaulting package to group ID: com.mycompany.app
[INFO]
------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO]
------------------------------------------------------------------------
[INFO] Failed to resolve artifact.
GroupId: org.apache.maven.archetypes
ArtifactId: maven-archetype-quickstart
Version: RELEASE
Reason: Unable to determine the release version
Try downloading the file manually from the project website.
Then, install it using the command:
mvn install:install-file -DgroupId=org.apache.maven.archetypes
-DartifactId=maven-arch
etype-quickstart \
-Dversion=RELEASE -Dpackaging=jar -Dfile=/path/to/file
org.apache.maven.archetypes:maven-archetype-quickstart:jar:RELEASE
[INFO]
------------------------------------------------------------------------
[INFO] For more information, run Maven with the -e switch
[INFO]
------------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Tue Apr 17 07:08:50 MDT 2007
[INFO] Final Memory: 4M/8M
[INFO]
------------------------------------------------------------------------