Java与C通过管道进行交互

最近的一个项目需要使用到Java和C通信的,因为是在安卓上,所以我们能使用的方法有限(安卓上只支持部分Java,还有C也是精简的库)。 当然,使用本地Socket是一个简答你的解决办法。但是不是特别的优美。于是,我们准备使用Linux上使用的最多的管道进行通信。 之前查阅了一些资料,因为大部分网络上介绍Java管道的都是Java中的PipedStream,这个确实是管道类,但是很可惜,为了Java的操作 系统无关性,这个管道只适用于同一个JVM中,也就是说,他无法和其他VM或者是非Java语言进行交互。所以说,使用前还是需要看清JDK 说明文档。 如果想详细了解PIPE,可以参考这篇文章深入理解PIPE,当然,还有我们的维基百科 接下来开始说我的代码了。 先是Java代码: 这边,我是简单的开了一个BufferedOutputStream,用来向管道中写入数据。 让我们来看一下C的代码: 这个就是相当简单了。熟悉Linux编程就知道,先mkfifo开一个管道,然后再进行读取。 然后我们看一下运行结果: 就是这样,Java中写向管道的数据被C语言得到了。不过,C向管道中写入数据,这部分还是在研究中。你们可以看看这篇文章 How to connect a C/C++ process to…

Tomcat接受HTTP请求详解

在前一篇文章中我们提到了Tomcat的启动的详细过程,当然,这只是很简单的通过代码的解释, 在Tomcat的启动的过程中还用了生命周期的方式去管理组件,这一部分内容可以参考这篇博客: I’m Tiger – Tomcat组件生命周期管理 代码详解 接下来,我来详细的分析下Tomcat的处理HTTP请求的详细过程。首先我们需要知道Tomcat中有一个叫做Connector的接口,一开始 我也以为这是接受HTTP请求的地方,因为HTTP实质上还是一个TCP数据包,所以,在不使用NIO的情况下,会建立一个Socket套接字 来进行数据的交换,所以,一开始我的方向是在Connector和他的子类中寻找,不过,很快就放弃了,因为他的接口只提供Request 和Response的访问接口,所以,我觉得因该有个地方将这个操作封装了。于是乎,我开始下断点分析。于是我们找到了建立ServerSocket 的类,那就是org.apache.tomcat.util.net.DefaultServerSocketFactory,他的作用也很简单,就是建立一个ServerSocket,但是至少 我们的源头找到了。 然后我们在他的注释中发现了这样一段代码: 于是乎,我们的注意力可以放到这个AbstractEndpoint上了。然后我们可以看到这是个Abstract类,按照设计模式的思想,虚类实现公共部分代码, 我们可以相信,实现套接字的连接类就是AbstractEndpoint的子类,于是,我们又找到了org.apache.tomcat.util.net.JIoEndpoint,通过注释,我 们不难看出,这就是我们寻找的类: 之后就可以看到那个接收器中的处理函数,这个函数在Acceptor中,public void run().在此,我只摘录了主要的代码。如下:…