最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用代理進(jìn)行網(wǎng)絡(luò)連接方法示例

 更新時(shí)間:2017年09月25日 16:08:10   作者:思想永無(wú)止境  
這篇文章主要介紹了Java使用代理進(jìn)行網(wǎng)絡(luò)連接方法示例,內(nèi)容十分詳細(xì),需要的朋友可以參考下。

需求是這樣的:

一、界面上要有這樣幾種代理類(lèi)型可以選。

1.HTTP代理

2.Socks代理

3.不使用代理(直連)

4.使用瀏覽器設(shè)置(瀏覽器也是HTTP、Socks、直連三種)。

可參考QQ登錄設(shè)置里的代理能,其實(shí)跟qq的代理功能是一樣的。

二、測(cè)試使用所填寫(xiě)的代理配置信息是否可連接

三、記錄用戶上次選擇的代理配置,默認(rèn)使用用戶上次使用的代理配置進(jìn)行網(wǎng)絡(luò)連接。

程序運(yùn)行環(huán)境是WindowsXP、Windows7、Windows8系統(tǒng)。

使用的技術(shù)為Java7,Swing,CXF。

難點(diǎn):

1.如何進(jìn)行全居的代理設(shè)置:

/**
 * 網(wǎng)絡(luò)代理Bean
 * 
 * @author tang
 */
public class NetworkBean implements Serializable {
  private static final long serialVersionUID = 1L;
  // private static sun.misc.BASE64Encoder base64Encoder = new sun.misc.BASE64Encoder();
  private Proxy.Type type;// 代理類(lèi)型
  private String address;// ip 地址
  private String port;// 端口號(hào)
  private String username;// 代理服務(wù)器用戶名
  private String password;// 代理服務(wù)器用戶密碼
  private String domain;// 域
  private String typeText;// 代理類(lèi)型顯示的文本
  public NetworkBean() {
  }
  public NetworkBean(Type type, String address, String port, String username, String password) {
    this.type = type;
    this.address = address;
    this.port = port;
    this.username = username;
    this.password = password;
  }
  public NetworkBean(Type type, String address, String port, String username, String password, String domain) {
    super();
    this.type = type;
    this.address = address;
    this.port = port;
    this.username = username;
    this.password = password;
    this.domain = domain;
  }
  public Proxy.Type getType() {
    return type;
  }
  public void setType(Proxy.Type type) {
    this.type = type;
  }
  public String getAddress() {
    return address;
  }
  public void setAddress(String address) {
    this.address = address;
  }
  public String getPort() {
    return port;
  }
  public void setPort(String port) {
    this.port = port;
  }
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
  public String getDomain() {
    return domain;
  }
  public void setDomain(String domain) {
    this.domain = domain;
  }
  public String getTypeText() {
    return typeText;
  }
  public void setTypeText(String typeText) {
    this.typeText = typeText;
  }
  /**
   * return domain + "\" + username
   */
  public String getDomainAndUsername() {
    return (Utils.toString(domain).trim().isEmpty()) ? username : domain.trim() + "\\" + username;
  }
  /**
   * return domain + "\" + username + ":" + password
   */
  public String getDomainAndUsernameAndPassword() {
    return getDomainAndUsername() + ":" + password;
  }
  /**
   * return username + ":" + password
   */
  public String getUsernameAndPassword() {
    return username + ":" + password;
  }
  /**
   * return (domain + "\" + username + ":" + password) to 64 bit
   */
  public String getDomainAndUsernameAndPassword64() {
    return org.apache.commons.codec.binary.Base64.encodeBase64String(getDomainAndUsernameAndPassword().getBytes());
  }
  @Override
  public String toString() {
    return "NetworkBean [type=" + type + ", typeText=" + typeText + ", address=" + address + ", port=" + port + ", username=" + username + ", password="
        + password + ", domain=" + domain + "]";
  }
}
/**
   * 根據(jù)指定的代理信息設(shè)置系統(tǒng)全局的網(wǎng)絡(luò)代理
   * 
   * @param networkBean
   */
  public static void setNetworkProxyBySystem(NetworkBean networkBean) {
    System.out.println("System Set Proxy : " + networkBean);
    if (isUserProxy(networkBean)) {
      if (networkBean.getType() == Proxy.Type.SOCKS) {
        System.getProperties().remove("http.proxyHost");
        System.getProperties().remove("http.proxyPort");
        System.getProperties().setProperty("socksProxyHost", networkBean.getAddress());
        System.getProperties().setProperty("socksProxyPort", networkBean.getPort());
      } else {
        System.getProperties().setProperty("http.proxyHost", networkBean.getAddress());
        System.getProperties().setProperty("http.proxyPort", networkBean.getPort());
      }
      Authenticator.setDefault(new BairuiAuthenticator(networkBean.getDomainAndUsername(), networkBean.getPassword()));
    } else if (networkBean != null) {
      System.getProperties().remove("proxySet");
      System.getProperties().remove("socksProxySet");
      System.getProperties().remove("http.proxyHost");
      System.getProperties().remove("http.proxyPort");
      System.getProperties().remove("socksProxyHost");
      System.getProperties().remove("socksProxyPort");
    }
  }
  /**
   * 網(wǎng)絡(luò)用戶名密碼校驗(yàn)提供者
   */
  public static class BairuiAuthenticator extends Authenticator {
    private String username, password;
    public BairuiAuthenticator(String username, String password) {
      this.username = username;
      this.password = password;
    }
    protected PasswordAuthentication getPasswordAuthentication() {
      return new PasswordAuthentication(username, password == null ? null : password.toCharArray());
    }
  }

2.如何讓CXF的Service使用系統(tǒng)的代理:

 /**
   * 為WebService接口添加網(wǎng)絡(luò)代理支持:httpClientPolicy.setAllowChunking(false);
   * 
   * @param client
   */
  public static void setWebServiceSupportProxy(Client client) {
    HTTPConduit conduit = (HTTPConduit) client.getConduit();
    HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
    httpClientPolicy.setAllowChunking(false);
    conduit.setClient(httpClientPolicy);
  }

3.使用瀏覽器設(shè)置:

/**
   * 讀取用戶注冊(cè)表獲取瀏覽器的代理設(shè)置
   * 
   * @return 該方法不會(huì)返回null值也不會(huì)拋出異常
   */
  public static NetworkBean getBrowserProxy() {
    NetworkBean networkBean = new NetworkBean();
    networkBean.setTypeText(typeTexts[3]);
    networkBean.setType(Proxy.Type.DIRECT);
    String key = "reg query \"HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\"";// 注冊(cè)表瀏覽器代理key
    try {
      Process exec = Runtime.getRuntime().exec(key);
      try (InputStreamReader i = new InputStreamReader(exec.getInputStream()); BufferedReader ir = new BufferedReader(i)) {
        for (String line = ir.readLine(); line != null; line = ir.readLine()) {
          if (line.indexOf("ProxyServer") >= 0) {
            String[] split1 = line.split("  ");
            if (split1.length > 3) {
              String[] split2 = split1[3].trim().split(":");
              if (split2.length > 1) {
                if (!Utils.toString(split2[0]).isEmpty() && !Utils.toString(split2[1]).isEmpty()) {
                  networkBean.setAddress(split2[0]);
                  networkBean.setPort(split2[1]);
                  networkBean.setType(Proxy.Type.HTTP);
                  break;
                }
              }
            }
          }
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
    } catch (Exception e) {// 從注冊(cè)表讀取失敗
      e.printStackTrace();
    }
    return networkBean;
  }

4.測(cè)試代理是否可用

因?yàn)槌绦蛑惺褂昧朔?wù)器的兩個(gè)不同的端口,所以需要測(cè)試兩個(gè)端口是否都可連。

如果使用了多臺(tái)服務(wù)器,更加需要分別測(cè)試了。

 /**
   * 測(cè)試網(wǎng)絡(luò)代理是否能通過(guò)連接,如果不通過(guò)拋出異常
   * 
   * @throws Exception
   */
  private static void testNetworkProxy() throws Exception {
    testWebService();
    testURLConnection();
  }
  /**
   * 測(cè)試CXF Service接口50367端口
   * 
   * @param networkBean
   * @throws Exception
   */
  public static void testWebService() throws Exception {
    JcptLoginService service = WebServiceUtils.getService(JcptLoginService.class, GeneralWebServiceAddress.LOGIN_SERVICE_URL_ADD);
    String result = service.getLoginPicture();
    System.out.println(result);
  }
  /**
   * 從HttpURLConnection對(duì)象讀取指定字符,如果不匹配則拋出異常
   * 
   * @param connection
   * @throws Exception
   */
  private static void checkConnectionContent(HttpURLConnection connection) throws Exception {
    try (InputStream inputStream = connection.getInputStream()) {
      byte[] b = new byte[1024];
      boolean success = false;
      StringBuffer sb = new StringBuffer();
      for (int i = inputStream.read(b); i > 0; i = inputStream.read(b)) {
        String tempStr = new String(b, 0, i);
        sb.append(tempStr);
        if (tempStr.indexOf("3,file not found") >= 0) {// service固定返回這個(gè)字符串,如果service作了更改此處也應(yīng)更改
          success = true;
          break;
        }
      }
      if (!success) {
        String str = sb.toString();
        if (str.length() > 3) {
          char char0 = str.charAt(0);
          char char1 = str.charAt(1);
          if (Utils.isNumber(char0 + "") && char1 == ',') {
            success = true;
          }
        }
      }
      if (!success) {
        throw new RuntimeException("result content does not meet expectations.");
      }
    } catch (Exception ex) {
      throw ex;
    }
  }
  /**
   * 測(cè)試文件下載接口9067端口
   * 
   * @param networkBean
   * @throws Exception
   */
  public static void testURLConnection() throws Exception {
    HttpURLConnection connection = (HttpURLConnection) new URL(GeneralWebServiceAddress.FILE_DOWN_URL_ADD + "path=").openConnection();
    checkConnectionContent(connection);
  }
 /**
   * 測(cè)試代理服務(wù)器連接
   */
  private void testProxyConnection() {
    NetworkBean readNetworkBean = NetworkProxyTool.readNetworkBean();// 先獲得正在使用的NetworkBean
    try {
      NetworkBean networkBean = createNetworkBean();// 根據(jù)用戶填寫(xiě)的信息創(chuàng)建的NetworkBean對(duì)象
      showTestResultDialog(NetworkProxyTool.testNetworkProxyBySystem(networkBean));
    } catch (Exception ex) {
      showTestResultDialog(false);
    }
    NetworkProxyTool.setNetworkProxyBySystem(readNetworkBean);// 測(cè)試結(jié)束,還原原來(lái)的NetworkBean
  }

5.因?yàn)閖ava連接網(wǎng)絡(luò)時(shí),如果使用當(dāng)前的代理連接失敗,那么就會(huì)使用操作系統(tǒng)中緩存的代理進(jìn)行網(wǎng)絡(luò)連接,如何是測(cè)試連接時(shí)不使用操作系統(tǒng)緩存,但測(cè)試結(jié)束后使用操作系統(tǒng)緩存。

 /**
   * 設(shè)置長(zhǎng)連接和驗(yàn)證信息緩存是否開(kāi)啟
   * 
   * @param keepAlive
   */
  public static void setKeepAliveAndAuthCache(boolean keepAlive) {
    System.setProperty("http.keepAlive", keepAlive + "");// 設(shè)置是否開(kāi)始長(zhǎng)連接,如果為false可以防止連接被緩存(如果連接被緩存,用戶名密碼等所有信息都會(huì)被緩存)
    if (keepAlive) {
      AuthCacheValue.setAuthCache(new AuthCacheImpl());
    } else {
      // 設(shè)置一個(gè)空的實(shí)現(xiàn)AuthCache可以防止用戶名密碼信息被緩存
      AuthCacheValue.setAuthCache(new AuthCache() {
        public void remove(String pkey, AuthCacheValue entry) {
        }
        public void put(String pkey, AuthCacheValue value) {
        }
        public AuthCacheValue get(String pkey, String skey) {
          return null;
        }
      });
    }
  }

在登錄之前:

  NetworkProxyTool.setKeepAliveAndAuthCache(false);
  new.Login();

登錄成功后:

 NetworkProxyTool.setKeepAliveAndAuthCache(true);

6.保存用戶的代理配置:

因?yàn)橹苯有蛄谢远x類(lèi)型的對(duì)象,會(huì)存在版本問(wèn)題(比如這個(gè)類(lèi)的包名、類(lèi)名改了,就死定了)。
所以不能直接序列化自定義類(lèi)的對(duì)象,二是將自定義類(lèi)對(duì)象的屬性轉(zhuǎn)成字典(Map),然后序列化map。

/**
   * 讀取本地網(wǎng)絡(luò)代理設(shè)置配置文件
   * 
   * @return
   */
  public static NetworkBean readNetworkBean() {
    NetworkBean networkBean = getCurrNetworkBean(readNetworkBeanMap());
    if (networkBean == null) {
      networkBean = new NetworkBean();
      networkBean.setType(Proxy.Type.DIRECT);
    }
    return networkBean;
  }
  /**
   * 獲取用戶上次選擇網(wǎng)絡(luò)代理設(shè)置
   * 
   * @param map
   * @return
   */
  public static NetworkBean getCurrNetworkBean(Map<String, Object> map) {
    putBrowserProxy(map);
    return (NetworkBean) map.get(getTypeMapKey(map));
  }
  /**
   * 將瀏覽器的信息存放入代理信息總配置map
   * 
   * @param map
   */
  private static void putBrowserProxy(Map<String, Object> map) {
    if (browserProxyBean == null) {
      browserProxyBean = getBrowserProxy();
    }
    NetworkBean networkBeanBrowser = (NetworkBean) map.get(key_browser);
    if (networkBeanBrowser == null) {
      networkBeanBrowser = browserProxyBean;
    }
    if ((Utils.toString(browserProxyBean.getAddress()).isEmpty() || !browserProxyBean.getAddress().equals(networkBeanBrowser.getAddress()))
        || (Utils.toString(browserProxyBean.getPort()).isEmpty() || !browserProxyBean.getPort().equals(networkBeanBrowser.getPort()))) {
      networkBeanBrowser.setUsername(null);
      networkBeanBrowser.setPassword(null);
      networkBeanBrowser.setDomain(null);
    }
    networkBeanBrowser.setType(browserProxyBean.getType());
    networkBeanBrowser.setTypeText(browserProxyBean.getTypeText());
    networkBeanBrowser.setAddress(browserProxyBean.getAddress());
    networkBeanBrowser.setPort(browserProxyBean.getPort());
    map.put(key_browser, networkBeanBrowser);
  }

在登錄之前:

  NetworkBean networkBean = NetworkProxyTool.readNetworkBean();
  NetworkProxyTool.setNetworkProxyBySystem(networkBean);
  NetworkProxyTool.setKeepAliveAndAuthCache(false);
  new.Login();

在用戶配置完代理點(diǎn)擊確定時(shí):

 /**
   * 點(diǎn)擊確定
   */
  private void confirm() {

    if ((isHttp() || isSocks()) && !checkIpAndPortNotNull()) {
      return;
    }
    NetworkBean networkBean = createNetworkBean();
    if (isHttp()) {// HTTP代理
      if (networkBean.getDomain() != null) {
        networkBean.setDomain(networkBean.getDomain().trim());
      }
      proxySettingMap.put(key_http, networkBean);
      proxySettingMap.put(key_proxy_type, key_http);
    } else if (isSocks()) {// SOCKS代理
      proxySettingMap.put(key_socks, networkBean);
      proxySettingMap.put(key_proxy_type, key_socks);
    } else if (isBrowser()) {
      proxySettingMap.put(key_browser, networkBean);
      proxySettingMap.put(key_proxy_type, key_browser);
    } else {
      proxySettingMap.put(key_direct, networkBean);
      proxySettingMap.put(key_proxy_type, key_direct);
    }
    userCurrShowNetworkBean = networkBean;
    isConfirm = true;
    setVisible(false);
    NetworkProxyTool.saveNetworkProxyConfig(proxySettingMap);
  }

System Properties

Java System Properties網(wǎng)絡(luò)設(shè)置有哪些key

http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html

http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html

Java System Properties優(yōu)先級(jí)說(shuō)明

host和port比set優(yōu)先級(jí)高,也就是說(shuō)set可以不用去設(shè)置。

如存在http.proxyHost和http.proxyPort時(shí),proxySet設(shè)為false無(wú)效,系統(tǒng)仍然可以使用http代理。

存在socksProxyHost和socksProxyPort時(shí),socksProxySet設(shè)為false無(wú)效,系統(tǒng)仍然可以使用socks代理。

http比socks優(yōu)先級(jí)高,即存在http.proxyHost和http.proxyPort時(shí),socksProxySet、socksProxyHost、socksProxyPort都會(huì)失效,系統(tǒng)會(huì)使用http代理。

使用java.net.Proxy

如果只是單個(gè)的連接需要使用代理,那么可以采用Proxy類(lèi)進(jìn)行代理連接。

說(shuō)明:

1.Socket只能使用socks代理不能使用http代理。

2.Socket使用使用Authenticator來(lái)進(jìn)行驗(yàn)證。

3.URLConnection 使用RequestProperty是只對(duì)當(dāng)前連接有效,不會(huì)緩存,Authenticator是全局性的,對(duì)所有網(wǎng)絡(luò)請(qǐng)求都有效,會(huì)緩存,但RequestProperty的優(yōu)先級(jí)比Authenticator高。

4.只有RequestProperty需要64位編碼,Authenticator不需要。

5.需要清除驗(yàn)證緩存的,不使用驗(yàn)證緩存上面已經(jīng)有代碼了,這里就不重復(fù)寫(xiě)了。

6.其實(shí),建議采用全局性的代理連接,不管是URLConnection 還是Socket 都簡(jiǎn)單方便、統(tǒng)一。

代碼:

NetworkBean httpBean = new NetworkBean(Proxy.Type.HTTP, "192.168.77.5", "8888", "tzc", "123", null);
Proxy httpProxy = new Proxy(httpBean.getType(), new InetSocketAddress(httpBean.getAddress(), Integer.parseInt(httpBean.getPort())));
NetworkBean socksBean = new NetworkBean(Proxy.Type.SOCKS, "192.168.77.5", "9999", "tzc", "123", "ttt");
Proxy socksProxy = new Proxy(socksBean.getType(), new InetSocketAddress(socksBean.getAddress(), Integer.parseInt(socksBean.getPort())));
URLConnection httpProxyConnection = new URL("http://www.baidu.com/").openConnection(httpProxy);
//或者Authenticator.setDefault(new BairuiAuthenticator(networkBean.getDomainAndUsername(), networkBean.getPassword()));
httpProxyConnection.setRequestProperty("Proxy-Authorization", "Basic "+httpBean.getDomainAndUsernameAndPassword64());
URLConnection socksProxyConnection = new URL("http://www.baidu.com/").openConnection(socksProxy);
//或者Authenticator.setDefault(new BairuiAuthenticator(networkBean.getDomainAndUsername(), networkBean.getPassword()));
socksProxyConnection.setRequestProperty("Proxy-Authorization", "Basic "+httpBean.getDomainAndUsernameAndPassword64());
Socket socket = new Socket(socksProxy);
Authenticator.setDefault(new BairuiAuthenticator(networkBean.getDomainAndUsername(), networkBean.getPassword()));
socket.connect(new InetSocketAddress("www.baidu.com", 5555));

總結(jié)

以上就是本文關(guān)于Java使用代理進(jìn)行網(wǎng)絡(luò)連接方法示例的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)Java有所幫助,歡迎各位瀏覽本站其他專(zhuān)題并隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的。

相關(guān)文章

  • Java 實(shí)現(xiàn)協(xié)同過(guò)濾算法推薦算法的示例代碼

    Java 實(shí)現(xiàn)協(xié)同過(guò)濾算法推薦算法的示例代碼

    本文介紹了協(xié)同過(guò)濾算法的概念,包括基于用戶的協(xié)同過(guò)濾和基于物品的協(xié)同過(guò)濾,文章詳細(xì)解釋了數(shù)據(jù)準(zhǔn)備、相似度計(jì)算以及如何在Java中實(shí)現(xiàn)這些算法,通過(guò)一個(gè)簡(jiǎn)單的用戶-物品評(píng)分矩陣示例,展示了如何計(jì)算用戶和物品之間的相似度,并推薦未評(píng)分的物品,感興趣的朋友一起看看吧
    2025-02-02
  • Java實(shí)現(xiàn)差分?jǐn)?shù)組的示例詳解

    Java實(shí)現(xiàn)差分?jǐn)?shù)組的示例詳解

    差分?jǐn)?shù)組是由原數(shù)組進(jìn)化而來(lái),值為原數(shù)組當(dāng)前位置值減去上一個(gè)位置的值。本文將通過(guò)例題詳解如何利用Java實(shí)現(xiàn)差分?jǐn)?shù)組,需要的可以參考一下
    2022-06-06
  • 淺析fastjson2時(shí)間序列化和反序列化的簡(jiǎn)單使用

    淺析fastjson2時(shí)間序列化和反序列化的簡(jiǎn)單使用

    在項(xiàng)目中將fastjson升級(jí)為fastjson2后,我們遇到了一些與fastjson不完全兼容的問(wèn)題,所以本文就來(lái)探討下fastjson2的時(shí)間序列化和反序列化的簡(jiǎn)單使用吧
    2025-01-01
  • springboot集成RocketMQ過(guò)程及使用示例詳解

    springboot集成RocketMQ過(guò)程及使用示例詳解

    這篇文章主要為大家介紹了springboot集成RocketMQ過(guò)程及使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • java計(jì)算π的多種方法

    java計(jì)算π的多種方法

    這篇文章主要介紹了使用java計(jì)算π的多種方法,代碼詳細(xì),邏輯清晰,對(duì)于算法思路可能有所幫助,需要的朋友可以參考下
    2021-04-04
  • SpringBoot項(xiàng)目訪問(wèn)任意接口出現(xiàn)401錯(cuò)誤的解決方案

    SpringBoot項(xiàng)目訪問(wèn)任意接口出現(xiàn)401錯(cuò)誤的解決方案

    今天小編就為大家分享一篇關(guān)于SpringBoot項(xiàng)目訪問(wèn)任意接口出現(xiàn)401錯(cuò)誤的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Netty源碼分析NioEventLoop線程的啟動(dòng)

    Netty源碼分析NioEventLoop線程的啟動(dòng)

    這篇文章主要為大家介紹了Netty源碼分析NioEventLoop線程的啟動(dòng)示例,有需要的朋友,可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java深入淺出講解多線程的概念到使用

    Java深入淺出講解多線程的概念到使用

    哈哈!經(jīng)過(guò)一個(gè)階段的學(xué)習(xí),Java基礎(chǔ)知識(shí)學(xué)習(xí)終于到多線程了!Java多線程以及后面互斥鎖的概念都是Java基礎(chǔ)學(xué)習(xí)的難點(diǎn),所以我做了一個(gè)總結(jié),希望對(duì)大家也有幫助
    2022-05-05
  • Spring中的Sentinel規(guī)則持久化解析

    Spring中的Sentinel規(guī)則持久化解析

    這篇文章主要介紹了Spring中的Sentinel規(guī)則持久化解析,具體內(nèi)容包括,Sentinel規(guī)則推送三種模式介紹,原始模式,拉模式,推模式,并對(duì)基于Nacos配置中心控制臺(tái)實(shí)現(xiàn)推送進(jìn)行詳盡介紹,需要的朋友可以參考下
    2023-09-09
  • Java進(jìn)行反編譯生成.java文件方式(javap、jad下載安裝使用)

    Java進(jìn)行反編譯生成.java文件方式(javap、jad下載安裝使用)

    這篇文章主要介紹了Java進(jìn)行反編譯生成.java文件方式(javap、jad下載安裝使用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評(píng)論

柏乡县| 赫章县| 吉林省| 胶州市| 江达县| 建昌县| 禹城市| 蓬溪县| 焉耆| 稷山县| 石河子市| 准格尔旗| 尚志市| 沛县| 翁牛特旗| 西丰县| 怀来县| 云浮市| 丽水市| 山东省| 绍兴市| 抚顺市| 德庆县| 建瓯市| 雷波县| 外汇| 古田县| 高密市| 蓬溪县| 武宣县| 华阴市| 巴林左旗| 丁青县| 平利县| 湾仔区| 休宁县| 赤峰市| 民丰县| 乐陵市| 蕲春县| 西峡县|