当前位置: 首页 > news >正文

个人购买域名做企业网站网络公司的网页设计

个人购买域名做企业网站,网络公司的网页设计,宁波网站推广专业的建站优化公司,wordpress 畅言目录 72、用 Java 的套接字编程实现一个多线程的回显#xff08;echo#xff09;服务器。 73、XML 文档定义有几种形式#xff1f;它们之间有何本质区别#xff1f;解析XML 文档有哪几种方式#xff1f; 74、你在项目中哪些地方用到了 XML#xff1f; 72、用 Java 的套…目录 72、用 Java 的套接字编程实现一个多线程的回显echo服务器。 73、XML 文档定义有几种形式它们之间有何本质区别解析XML 文档有哪几种方式 74、你在项目中哪些地方用到了 XML 72、用 Java 的套接字编程实现一个多线程的回显echo服务器。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket;public class EchoServer {private static final int ECHO_SERVER_PORT 6789;public static void main(String[] args) {try(ServerSocket server new ServerSocket(ECHO_SERVER_PORT)) {System.out.println(服务器已经启动...);while(true) {Socket client server.accept();new Thread(new ClientHandler(client)).start();}} catch (IOException e) {e.printStackTrace();} }private static class ClientHandler implements Runnable {private Socket client;public ClientHandler(Socket client) {this.client client;}Overridepublic void run() {try(BufferedReader br new BufferedReader(new InputStreamReader(client.getInputStream()));PrintWriter pw new PrintWriter(client.getOutputStream())) {String msg br.readLine();System.out.println(收到 client.getInetAddress() 发送的: msg);pw.println(msg);pw.flush();} catch(Exception ex) {ex.printStackTrace();} finally {try {client.close();} catch (IOException e) {e.printStackTrace();}}} } } 注意上面的代码使用了 Java 7 的 TWR 语法由于很多外部资源类都间接的实现了 AutoCloseable 接口单方法回调接口因此可以利用 TWR 语法在 try结束的时候通过回调的方式自动调用外部资源类的 close()方法避免书写冗长的finally 代码块。此外上面的代码用一个静态内部类实现线程的功能使用多线程可以避免一个用户 I/O 操作所产生的中断影响其他用户对服务器的访问简单的说就是一个用户的输入操作不会造成其他用户的阻塞。当然上面的代码使用线程池可以获得更好的性能因为频繁的创建和销毁线程所造成的开销也是不可忽视的。 下面是一段回显客户端测试代码 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner;public class EchoClient {public static void main(String[] args) throws Exception {Socket client new Socket(localhost, 6789);Scanner sc new Scanner(System.in);System.out.print(请输入内容: );String msg sc.nextLine();sc.close();PrintWriter pw new PrintWriter(client.getOutputStream());pw.println(msg);pw.flush();BufferedReader br new BufferedReader(newInputStreamReader(client.getInputStream()));System.out.println(br.readLine());client.close();} } 如果希望用 NIO 的多路复用套接字实现服务器代码如下所示。NIO 的操作虽然带来了更好的性能但是有些操作是比较底层的对于初学者来说还是有些难于理解。 import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.util.Iterator;public class EchoServerNIO {private static final int ECHO_SERVER_PORT 6789;private static final int ECHO_SERVER_TIMEOUT 5000;private static final int BUFFER_SIZE 1024;private static ServerSocketChannel serverChannel null;private static Selector selector null;// 多路复用选择器private static ByteBuffer buffer null;// 缓冲区public static void main(String[] args) {init();listen(); }private static void init() {try {serverChannel ServerSocketChannel.open();buffer ByteBuffer.allocate(BUFFER_SIZE);serverChannel.socket().bind(newInetSocketAddress(ECHO_SERVER_PORT));serverChannel.configureBlocking(false);selector Selector.open();serverChannel.register(selector, SelectionKey.OP_ACCEPT);} catch (Exception e) {throw new RuntimeException(e);}} private static void listen() {while (true) {try {if (selector.select(ECHO_SERVER_TIMEOUT) ! 0) {IteratorSelectionKey it selector.selectedKeys().iterator();while (it.hasNext()) {SelectionKey key it.next();it.remove();handleKey(key);}}} catch (Exception e) {e.printStackTrace();}} } private static void handleKey(SelectionKey key) throws IOException {SocketChannel channel null;try {if (key.isAcceptable()) {ServerSocketChannel serverChannel (ServerSocketChannel) key.channel();channel serverChannel.accept();channel.configureBlocking(false);channel.register(selector, SelectionKey.OP_READ);} else if (key.isReadable()) {channel (SocketChannel) key.channel();buffer.clear();if (channel.read(buffer) 0) {buffer.flip();CharBuffer charBuffer CharsetHelper.decode(buffer);String msg charBuffer.toString();System.out.println(收到 channel.getRemoteAddress() 的消息 msg);channel.write(CharsetHelper.encode(CharBuffer.wrap(msg)));} else {channel.close();}}} catch (Exception e) {e.printStackTrace();if (channel ! null) {channel.close();}}} }import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.CharacterCodingException; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; import java.nio.charset.CharsetEncoder;public final class CharsetHelper {private static final String UTF_8 UTF-8;private static CharsetEncoder encoder Charset.forName(UTF_8).newEncoder();private static CharsetDecoder decoder Charset.forName(UTF_8).newDecoder();private CharsetHelper() {}public static ByteBuffer encode(CharBuffer in) throws CharacterCodingException{return encoder.encode(in);}public static CharBuffer decode(ByteBuffer in) throws CharacterCodingException{return decoder.decode(in);} } 73、XML 文档定义有几种形式它们之间有何本质区别解析XML 文档有哪几种方式 XML 文档定义分为 DTD 和 Schema 两种形式二者都是对 XML 语法的约束其本质区别在于 Schema 本身也是一个 XML 文件可以被 XML 解析器解析而且可以为 XML 承载的数据定义类型约束能力较之 DTD 更强大。对 XML 的解析主要有 DOM文档对象模型Document Object Model、SAXSimple API for XML和 StAXJava 6 中引入的新的解析 XML 的方式Streaming API for XML其中 DOM 处理大型文件时其性能下降的非常厉害这个问题是由 DOM 树结构占用的内存较多造成的而且 DOM 解析方式必须在解析文件之前把整个文档装入内存适合对 XML 的随机访问典型的用空间换取时间的策略SAX 是事件驱动型的 XML 解析方式它顺序读取 XML 文件不需要一次全部装载整个文件。当遇到像文件开头文档结束或者标签开头与标签结束时它会触发一个事件用户通过事件回调代码来处理 XML 文件适合对 XML 的顺序访问顾名思义StAX 把重点放在流上实际上 StAX 与其他解析方式的本质区别就在于应用程序能够把 XML 作为一个事件流来处理。将 XML 作为一组事件来处理的想法并不新颖SAX 就是这样做的但不同之处在于 StAX 允许应用程序代码把这些事件逐个拉出来而不用提供在解析器方便时从解析器中接收事件的处理程序。 74、你在项目中哪些地方用到了 XML XML 的主要作用有两个方面数据交换和信息配置。 在做数据交换时XML 将数据用标签组装成起来然后压缩打包加密后通过网络传送给接收者接收解密与解压缩后再从 XML 文件中还原相关信息进行处理XML 曾经是异构系统间交换数据的事实标准但此项功能几乎已经被 JSONJavaScript Object Notation取而代之。当然目前很多软件仍然使用 XML 来存储配置信息我们在很多项目中通常也会将作为配置信息的硬代码写在 XML 文件中Java 的很多框架也是这么做的而且这些框架都选择了 dom4j 作为处理 XML 的工具因为 Sun 公司的官方API 实在不怎么好用。 补充现在有很多时髦的软件如 Sublime已经开始将配置文件书写成 JSON格式我们已经强烈的感受到 XML 的另一项功能也将逐渐被业界抛弃。 要想了解更多 千题千解·Java面试宝典_时光の尘的博客-CSDN博客
http://www.sadfv.cn/news/206452/

相关文章:

  • 网站一个多少钱新乡市网站建设有哪些公司
  • 北京网站开发浩森宇特下载国家医保服务平台app
  • dw做网站电子商务网站包括
  • 有些公司做网站比较好的大理网站制作公司
  • 网站开发中 敬请期待湘潭关键词优化公司
  • 有什么网站有教师招聘考试题目做惠州网站设计方案
  • 杭州电商网站平台开发公司网站采集怎么做
  • 网站建设亮点青岛大型网站设计公司
  • 网站推广南京公司iis新建网站
  • 长春网站优化体验美工培训一对一
  • 青岛免费建站网络营销推广的核心是什么
  • 武进网站建设效果网站建设制作优帮云
  • 汉网网站建设WordPress搜索增强插件
  • 无锡哪家公司做网站巨野有做网站的公司吗
  • 微信网站开发报价表产品设计经典案例
  • 西安高端网站建设哪家好山西集团网站建设
  • 做个游戏网站多少钱网站seo平台
  • 傻瓜建网站newedge wordpress
  • 十大房产网站排行榜网页设计图片素材小插件
  • 行业协会网站建设方案游戏优化大师有用吗
  • 投资20万做网站好吗创建网站服务器地址
  • 北京公司网站设计电话肇庆 网站建设公司有哪些
  • 6黄页网站建设用ps做商城网站好做吗
  • 怎样做免费网站推广重庆人居建设集团网站
  • 如何做电影网站狼视听兰州起点网站建设公司
  • 河北seo网站优化公司如何做好企业网站建设
  • 网站建设人员组成wordpress 设置页面
  • 重庆平台网站推广加强网站政务服务建设
  • 网站手机客户端如何开发网站建设一般分为几个步骤
  • wordpress网站怎么进去做网站找不到客户