0 0

关于 BufferOutputStream 的创建与关闭 Socket 相关20

package ecclclient;

import java.net.*;
import java.io.*;
import eccl.socket.tools.ByteOperator;

public class TCPClient{
    public static void main(String[] args) throws Exception{	
    	
    	Socket s = null;
    	BufferedOutputStream w = null;
    	byte[] sendByte = new byte[512];
    	java.text.SimpleDateFormat df = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    	
    	java.util.Date initDate = df.parse("1970-01-01 00:00:00");
    	java.util.Date nowDate = new java.util.Date();
    	java.util.Date startDate = new java.util.Date();
    	java.util.Date endDate = new java.util.Date();
    	
    	long nowtime = (nowDate.getTime()-initDate.getTime())/1000;
    	long starttime = (startDate.getTime()-initDate.getTime())/1000; 
    	long endtime = (endDate.getTime()-initDate.getTime())/1000; 
    	//System.out.print(nowtime+"\n");

        for (int i = 0; i<512; i++) {
        	sendByte[i] = -1;
	    }
    	 putFloat(sendByte,4,30);
          putInt(sendByte,8,1);            
            putInt(sendByte,12,3);           
        s = new Socket("127.0.0.1",6800);	
         w = new BufferedOutputStream(s.getOutputStream());
        try{
        	for (int i = 0; i<20000; i++) {
	    	Thread.sleep(20000);
	    	putFloat(sendByte,4,30+i);
		w.write(sendByte);
	    	w.flush();
         }

        }catch(Exception e){
        	System.out.print("The program can't send the date!\n"+e);
        }
        finally{
        	w.close();
        	s.close();
        }
        
    }
    
	/**   
	*   整形转化为byte类型  
	*/   
	private static void putInt(byte[] buf,int offset,int value)   {   
		buf[offset+0] = (byte)((value  >> 24) & 0xff);   
		buf[offset+1] = (byte)((value  >> 16) & 0xff);   
		buf[offset+2] = (byte)((value  >> 8)  & 0xff);   
		buf[offset+3] = (byte)((value  >> 0)  & 0xff);   
	}
	/**   
	*   长整形转化为byte类型  
	*/ 
	public static void putLong(byte[] buf,int offset,long value) { 
        buf[offset + 0] = (byte) ((value >> 56) & 0xff); 
        buf[offset + 1] = (byte) ((value >> 48) & 0xff); 
        buf[offset + 2] = (byte) ((value >> 40) & 0xff); 
        buf[offset + 3] = (byte) ((value >> 32) & 0xff); 
        buf[offset + 4] = (byte) ((value >> 24) & 0xff); 
        buf[offset + 5] = (byte) ((value >> 16) & 0xff); 
        buf[offset + 6] = (byte) ((value >> 8) & 0xff); 
        buf[offset + 7] = (byte) ((value >> 0) & 0xff); 
    } 

	/**   
	*   字符串转化为byte类型  
	*/ 
	private static void putStr(byte[] buf,int offset,int length,String value) {
		try{
			byte[] tmpByte = value.getBytes();
			for(int i=offset+length-1;i>=offset;i--){
				buf[offset+i] = tmpByte[i];	
			}
		}catch(Exception e)
		{
			System.out.print("convert the String to Byte is error!\n");
		}
	}



	/**
     *  浮点型转化为byte类型
     */
	
	public static void putFloat(byte[] buf,int offset,float value){
		
		try {
			putInt(buf,offset,Float.floatToIntBits(value));
	    }
	    catch (Exception ex) {
	    	System.out.print("convert the float to Byte is error!\n");
	    }
		
	}    
}



我要发送大量的数据包 BufferOutputStream 该什么时候关闭,关闭它的时候  Socket.isClosed()=true;Socket.isConnected()=true;谁能够详细的解释解释谢谢。
问题补充:
在不出现异常的情况下一直保持连接发送,就是socket连接一次,持续发送,直到出现异常,断开重连。
2008年5月12日 15:07

1个答案 按时间排序 按投票排序

0 0

直接BufferOutputStream  close,BufferOutputStream 会自己flush。
然后再connection close,scoket close。

2008年5月12日 15:38

相关推荐

    输入与输出流和线程习题.pdf

    【输入与输出流】 输入与输出流是Java编程语言中用于数据传输的核心概念,它们允许程序与外部设备如硬盘、网络、键盘、显示器等进行数据交互。Java的I/O流模型是基于流式处理的,数据按顺序逐个字节或字符传输,即...

    17秋地大《Java语言程序设计》在线作业二参考资料.docx

    根据给定文件的信息,我们可以总结出以下相关的Java知识点: ### 关于while和do-while循环 **题目描述:** 在Java中,`while` 和 `do-while` 循环都是用于实现循环结构的重要语法结构。这两者的主要区别在于循环体...

    JAVA高级IO流.pdf

    - `BufferInputStream`和`BufferOutputStream`增加了缓冲功能,提高了读写效率。 - `PipedInputStream`和`PipedOutputStream`用于在不同线程间创建管道通信。 - `DataInputStream`和`DataOutputStream`则提供了对...

    java复习题库习题7.1(可编辑修改word版).pdf

    Java的输入与输出流是Java程序处理数据传输的关键部分,主要负责数据的读取和写入。本章节涉及的知识点主要包括流的类型、流的方向、流的使用场景以及相关的类和接口。 1. **流的传递方式**:流是按照串行的方式...

    Android 网络html源码查看器详解及实例

    例如,我们可以使用`FileInputStream`和`FileOutputStream`读写文件,`BufferInputStream`和`BufferOutputStream`则可以提高读写效率,通过缓冲区进行操作。以下是一个读取输入流并写入字节数组输出流的示例: ```...

    2018版 04747 Java语言程序设计(一)七八九十章知识点总结

    * 从数据流中读取数据时,必须有一个数据源与该数据流相连(FileInputStream in = new FileInputStream(“javatest.txt”);) 二、Java.io 包中提供了表示数据流的 4 个基本抽象类 * InputStream、OutputStream...

    something:他山之石,可以攻玉

    集合I/O多线程NIOjava基础知识点整理jvmspring 相关MYSQL分布式存储检索java源码学习集合Linkedlist详解Vector详解Stack详解Map构架HashMap详解HashMap put逻辑总结HashMap与HashTable比较HashSet介绍I/...

    sparkshuffle原理、shuffle操作问题解决和参数调优.doc

    写入磁盘文件时,会使用 Java 的缓冲输出流 BufferOutputStream,将数据缓冲在内存中,然后写入磁盘文件。 Spark Shuffle 是一种高效的数据处理机制,它可以将数据从 Map 任务输出到 Reduce 任务输入的过程中进行...

Global site tag (gtag.js) - Google Analytics