成都网站建设设计

将想法与焦点和您一起共享

Java接收数据流代码,java输入输出流代码

Java中数据流问题

当然不会有"该路径下不存在要操作的压缩文件"的错误

成都创新互联专业网站设计制作、成都网站制作,集网站策划、网站设计、网站制作于一体,网站seo、网站优化、网站营销、软文发稿等专业人才根据搜索规律编程设计,让网站在运行后,在搜索中有好的表现,专业设计制作为您带来效益的网站!让网站建设为您创造效益。

因为你没有直接对文件进行操作,而使用的是ZipEntry

报错的原因就是ZipEntry entry = file.getEntry("readme.txt");  这句返回的ZipEntry对象是空的。

zip压缩包肯定是对的,但是里面应该没有readme.txt这个文件,所以返回了null,参考下源码:

/**

* Returns the zip file entry for the specified name, or null

* if not found.

*

* @param name the name of the entry

* @return the zip file entry, or null if not found

* @throws IllegalStateException if the zip file has been closed

*/

public ZipEntry getEntry(String name) {

if (name == null) {

throw new NullPointerException("name");

}

long jzentry = 0;

synchronized (this) {

ensureOpen();

jzentry = getEntry(jzfile, name, true);

if (jzentry != 0) {

ZipEntry ze = new ZipEntry(name, jzentry);

freeEntry(jzfile, jzentry);

return ze;

}

}

return null;

}

PC端如何java socket编程获取来自WiFi模块发送的数据流

public class Server {  

public static void main(String args[]) throws IOException {  

//为了简单起见,所有的异常信息都往外抛  

int port = 8899;  

//定义一个ServerSocket监听在端口8899上  

ServerSocket server = new ServerSocket(port);  

//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的  

Socket socket = server.accept();  

//跟客户端建立好连接之后,我们就可以获取socket的InputStream,并从中读取客户端发过来的信息了。  

Reader reader = new InputStreamReader(socket.getInputStream());  

char chars[] = new char[64];  

int len;  

StringBuilder sb = new StringBuilder();  

while ((len=reader.read(chars)) != -1) {  

sb.append(new String(chars, 0, len));  

}  

System.out.println("from client: " + sb);  

reader.close();  

socket.close();  

server.close();  

}  

}

服务端从Socket的InputStream中读取数据的操作也是阻塞式的,如果从输入流中没有读取到数据程序会一直在那里不动,直到客户端往Socket的输出流中写入了数据,或关闭了Socket的输出流。当然,对于客户端的Socket也是同样如此。在操作完以后,整个程序结束前记得关闭对应的资源,即关闭对应的IO流和Socket。

[求助]求一个JAVA数据流的实例

BufferedWriter bu=new BufferedWriter(new FileWriter("file.txt"));

String filetxt=jTextArea1.getText();

String pp[]=filetxt.split("\n");

for(int i=0;ipp.length;i++){

bu.write(pp[i]);

bu.newLine();

}

bu.flush();

bu.close();

JOptionPane.showMessageDialog(this,"文件保存成功");

//就这样 放到你按钮的事件下就可以了 jTextArea1 是文本域 file.txt 是文件名 可以改成绝对路径

TCP/IP协议 怎么用JAVA发送和接收二进制数据 要具体实例

1.TCP/IP协议要求信息必须在块(chunk)中发送和接收,而块的长度必须是8位的倍数,因此,我们可以认为TCP/IP协议中传输的信息是字节序列。如何发送和解析信息需要一定的应用程序协议。

2.信息编码:

首先是Java里对基本整型的处理,发送时,要注意:1)每种数据类型的字节个数;2)这些字节的发送顺序是怎样的?(little-endian还是

big-endian);3)所传输的数值是有符号的(signed)还是无符号的(unsigned)。具体编码时采用位操作(移位和屏蔽)就可以了。

具体在Java里,可以采用DataOutputStream类和ByteArrayOutputStream来实现。恢复时可以采用

DataInputStream类和ByteArrayInputStream类。

其次,字符串和文本,在一组符号与一组整数之间的映射称为编码字符集(coded character

set)。发送者与接收者必须在符号与整数的映射方式上达成共识,才能使用文本信息进行通信,最简单的方法就是定义一个标准字符集。具体编码时采用

String的getBytes()方法。

最后,位操作。如果设置一个特定的设为1,先设置好掩码(mask),之后用或操作;要清空特定一位,用与操作。

3.成帧与解析

成帧(framing)技术解决了接收端如何定位消息的首位位置的问题。

如果接收者试图从套接字中读取比消息本身更多的字节,将可能发生以下两种情况之一:如果信道中没有其他消息,接收者将阻塞等待,同时无法处理接收

到的消息;如果发送者也在等待接收端的响应消息,则会形成死锁(dealock);另一方面,如果信道中还有其他消息,则接收者会将后面消息的一部分甚至

全部读到第一条消息中去,这将产生一些协议错误。因此,在使用TCP套接字时,成帧就是一个非常重要的考虑因素。

有两个技术:

1.基于定界符(Delimiter-based):消息的结束由一个唯一的标记(unique

marker)指出,即发送者在传输完数据后显式添加的一个特殊字节序列。这个特殊标记不能在传输的数据中出现。幸运的是,填充(stuffing)技术

能够对消息中出现的定界符进行修改,从而使接收者不将其识别为定界符。在接收者扫描定界符时,还能识别出修改过的数据,并在输出消息中对其进行还原,从而

使其与原始消息一致。

2.显式长度(Explicit length):在变长字段或消息前附加一个固定大小的字段,用来指示该字段或消息中包含了多少字节。这种方法要确定消息长度的上限,以确定保存这个长度需要的字节数。

接口:

Java代码 import java.io.IOException; import java.io.OutputStream; public interface Framer { void frameMsg(byte [] message,OutputStream out) throws IOException; byte [] nextMsg() throws IOException; }

定界符的方式:

Java代码 import java.io.ByteArrayOutputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class DelimFramer implements Framer { private InputStream in;//data source; private static final byte DELIMTER=(byte)'\n';//message delimiter public DelimFramer(InputStream in){ this.in=in; } @Override public void frameMsg(byte[] message, OutputStream out) throws IOException { //ensure that the message dose not contain the delimiter for(byte b:message){ if(b==DELIMTER) throw new IOException("Message contains delimiter"); } out.write(message); out.write(DELIMTER); out.flush(); } @Override public byte[] nextMsg() throws IOException { ByteArrayOutputStream messageBuffer=new ByteArrayOutputStream(); int nextByte; while((nextByte=in.read())!=DELIMTER){ if(nextByte==-1){//end of stream? if(messageBuffer.size()==0){ return null; }else{ throw new EOFException("Non-empty message without delimiter"); } } messageBuffer.write(nextByte); } return messageBuffer.toByteArray(); } }

显式长度方法:

Java代码 import java.io.DataInputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class LengthFramer implements Framer { public static final int MAXMESSAGELENGTH=65535; public static final int BYTEMASK=0xff; public static final int SHOTMASK=0xffff; public static final int BYTESHIFT=8; private DataInputStream in;// wrapper for data I/O public LengthFramer(InputStream in) throws IOException{ this.in=new DataInputStream(in); } @Override public void frameMsg(byte[] message, OutputStream out) throws IOException { if(message.lengthMAXMESSAGELENGTH){ throw new IOException("message too long"); } //write length prefix out.write((message.lengthBYTEMASK)BYTEMASK); out.write(message.lengthBYTEMASK); //write message out.write(message); out.flush(); } @Override public byte[] nextMsg() throws IOException { int length; try{ length=in.readUnsignedShort(); }catch(EOFException e){ //no (or 1 byte) message; return null; } //0=length=65535; byte [] msg=new byte[length]; in.readFully(msg);//if exception,it's a framing error; return msg; } }

java中如何使用数据流

那要看你是何种输入手段了,屏幕输入有Scanner之类,文件输入的有FileReader之类的,具体可以看下java.io里面的类


名称栏目:Java接收数据流代码,java输入输出流代码
分享地址:http://chengdu.cdxwcx.cn/article/hdpigo.html