首页 文章 精选 留言 我的

精选列表

搜索[类型混淆],共10000篇文章
优秀的个人博客,低调大师

[Java][Android][Process] 分享 Process 运行命令行封装类型

我在以前的文章中提到,使用Java不会有一个问题,创建运行命令来创建太多进程后创建进程行语句。 [Android] ProcessBuilder与Runtime.getRuntime().exec分别创建进程的差别 进行多次測试后发现是由于没有正常退出进程,以及全然读取掉流数据。和关闭流导致的问题。 在多次优化后,建立例如以下封装类: ProcessModel.java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; /** * Create By Qiujuer * 2014-07-26 * <p/> * 运行命令行语句静态方法封装 */ public class ProcessModel { //换行符 private static final String BREAK_LINE; //运行退出命令 private static final byte[] COMMAND_EXIT; //错误缓冲 private static byte[] BUFFER; /** * 静态变量初始化 */ static { BREAK_LINE = "\n"; COMMAND_EXIT = "\nexit\n".getBytes(); BUFFER = new byte[32]; } /** * 运行命令 * * @param params 命令參数 * <pre> eg: "/system/bin/ping", "-c", "4", "-s", "100","www.qiujuer.net"</pre> * @return 运行结果 */ public static String execute(String... params) { Process process = null; StringBuilder sbReader = null; BufferedReader bReader = null; InputStreamReader isReader = null; InputStream in = null; InputStream err = null; OutputStream out = null; try { process = new ProcessBuilder() .command(params) .start(); out = process.getOutputStream(); in = process.getInputStream(); err = process.getErrorStream(); out.write(COMMAND_EXIT); out.flush(); process.waitFor(); isReader = new InputStreamReader(in); bReader = new BufferedReader(isReader); String s; if ((s = bReader.readLine()) != null) { sbReader = new StringBuilder(); sbReader.append(s); sbReader.append(BREAK_LINE); while ((s = bReader.readLine()) != null) { sbReader.append(s); sbReader.append(BREAK_LINE); } } while ((err.read(BUFFER)) > 0) { } } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { closeAllStream(out, err, in, isReader, bReader); if (process != null) { processDestroy(process); process = null; } } if (sbReader == null) return null; else return sbReader.toString(); } /** * 关闭全部流 * * @param out 输出流 * @param err 错误流 * @param in 输入流 * @param isReader 输入流封装 * @param bReader 输入流封装 */ private static void closeAllStream(OutputStream out, InputStream err, InputStream in, InputStreamReader isReader, BufferedReader bReader) { if (out != null) try { out.close(); } catch (IOException e) { e.printStackTrace(); } if (err != null) try { err.close(); } catch (IOException e) { e.printStackTrace(); } if (in != null) try { in.close(); } catch (IOException e) { e.printStackTrace(); } if (isReader != null) try { isReader.close(); } catch (IOException e) { e.printStackTrace(); } if (bReader != null) try { bReader.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 通过Android底层实现进程关闭 * * @param process 进程 */ private static void killProcess(Process process) { int pid = getProcessId(process); if (pid != 0) { try { //android kill process android.os.Process.killProcess(pid); } catch (Exception e) { try { process.destroy(); } catch (Exception ex) { } } } } /** * 获取进程的ID * * @param process 进程 * @return */ private static int getProcessId(Process process) { String str = process.toString(); try { int i = str.indexOf("=") + 1; int j = str.indexOf("]"); str = str.substring(i, j); return Integer.parseInt(str); } catch (Exception e) { return 0; } } /** * 销毁进程 * * @param process 进程 */ private static void processDestroy(Process process) { if (process != null) { try { //推断是否正常退出 if (process.exitValue() != 0) { killProcess(process); } } catch (IllegalThreadStateException e) { killProcess(process); } } } } 在进行批量压力測试到达125643线程的时候都不会发生此问题。与大家分享特此。 版权声明:本文博客原创文章,博客,未经同意,不得转载。 本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/4750175.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

【桌面虚拟化】之二类型及案例

作者:范军 (Frank Fan) 新浪微博:@frankfan7 微信:frankfan7 有网友在桌面虚拟化-精彩刚刚开始留言,认为很多方面没有说透。桌面虚拟化是个大的课题,我们慢慢来展开讨论。本文简单介绍桌面虚拟化的定义、几个适用的情景,以及架构设计的选择。 定义: Desktop virtualizationis a technology that decouples a PC desktop environment from a physical deviceso that the virtual machine (VM) of the PC desktop stored in a centralizedserver can be accessed from a remote client device through a network. There arevarious desktop virtualization technologies targeting different use cases, suchas hosted virtual desktop (HVD), local VM, streaming desktop and hosted shareddesktop. 以上是Gartner对桌面虚拟化的定义。这是个广泛的定义,它不仅仅局限于HVD(VDI),也包括本地虚拟机,共享桌面,Streaming桌面等等。 情景一: 一个大型企业A有完善严密的安全策略,网络设计比较复杂,在生产环境任何设置的改动都需要经过ChangeControl。最近该企业并购了另外一家小型企业B。需要在六个月之内把业务完全整合。这就意味着被并购企业的员工能够访问母公司的邮件,应用和数据,并且遵循目前的安全策略。如果按照传统的做法,需要化很大的力气评估企业B的网络和终端环境等,同时也要实施一系列的网络变更来允许企业B可以访问企业A的网络。设想企业A每个季度都要并购很多类似企业B的小公司。那么传统做法的工作量是非常大的,因为每个被并购企业的IT环境都不同,要短时间内实施业务整合的难度之大可想而知 情景二: 某公司有几个呼叫中心分布在不同城市,甚至其他的国家。呼叫中心人员众多,都使用统一应用程序。该公司也有很多短期的雇员或者合作伙伴,他们的流动性较大,而且分散在不同的地方。这些短期人员往往希望使用自已的设备(BYOD)来访问该公司的数据和应用。 管理分布在多处的大量桌面环境是个不小的挑战,要保证桌面OS及其应用及时升级来满足安全和业务的要求,也要保证短期人员能快速便捷的获得相应权限,并获得桌面和相关应用。 情景三: 某医院有几个院区分布在不同的地方。医护人员对移动办公的要求很高,不管是在办公室、病房还是会议室,都希望能访问相应的程序和数据。有的医生希望在家里也能访问相关应用和数据。 以上三个情景用传统解决方案也可以,不过可能耗时耗力,效果也不见得好。如果采用合理的桌面虚拟化方案,会有很明显的成效。 架构选择: 下面我们先介绍两种常见的桌面虚拟化的架构: HVD的虚拟机是运行在Hypervisor之上的。每一个虚拟机就是一个虚拟桌面。用户可以绑定某个虚拟机(DedicatedDesktop),也可以从一个池内随机获取虚拟机(PooledDesktop) Dedicated desktop保留用户对设置的更改,每次该用户都获取该虚拟机。而PooledDesktop在用户退出后不保留用户的更改,每次用户重新登录后获得一个新的虚拟机。 Published Apps and Shared Desktop无需Hypervisor,直接在ServerOS上实现共享的桌面或者共享的应用。 因为不同用户的需求不同,还有成本的考虑,很多大企业里往往采用多种架构的混合方案。 那么具体哪一种桌面虚拟化的架构才最适合上面的三种情景呢呢?你能回复此文提出您的看法么? 本文转自frankfan751CTO博客,原文链接:http://blog.51cto.com/frankfan/1224266,如需转载请自行联系原作者

优秀的个人博客,低调大师

Android的4种文件类型Java,class,dex,apk

Java 文件-----应用程序源文件 Android本身相当一部分都是用java编写而成(基本上架构图里头蓝色的部份都是用Java开发的),android的 应用必须使用java来开发 Class文件------Java编译后的目标文件 不像J2se,java编译成class就可以直接运行,android平台上class文件不能直接在android上运行。 由于Google 使用了自己的Dalvik来运行应用, 所以这里的class也肯定不能在AndroidDalvik的java环境中运行,android 的class文件实际上只是编译过程中的中间目标文件,需要链接成dex文件后才能在dalvik上运行 Dex文件-----Android平台上的可执行文件 Android虚拟机Dalvik支持的字节码文件格式Google在新发布的Android平台上使用了自己的Dalvik虚拟机 来定义, 这种虚拟机执行的并非Java字节码, 而是另一种字节码:dex格式的字节码。在编译Java代码之后, 通过Android平台上的工具可以将Java字节码转换成Dex字节码。虽然Google称Dalvik是为了移动设备定 做的,但是业界很多人认为这是为了规避向sun申请Javalicense。这个DalvikVM针对手机程式/CPU做过最 佳化,可以同时执行许多VM而不会占用太多Resource。 Apk文件-------Android上的安装文件 Apk是Android安装包的扩展名,一个Android安装包包含了与某个Android应用程序相关的所有文件。apk 文件将AndroidManifest.xml文件、应用程序代码(.dex文件)、资源文件和其他文件打成一个压缩包。一个工 程只能打进一个.apk文件 本文转自 一点点征服 博客园博客,原文链接:http://www.cnblogs.com/ldq2016/p/6228792.html ,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册