当前位置: 移动技术网 > IT编程>开发语言>Java > 学习记录——Java网络编程——输出流

学习记录——Java网络编程——输出流

2018年03月19日  | 移动技术网IT编程  | 我要评论

输出流

网络程序所作的很大一部分工作都是简单的输入和输出,Java的I/O建立于流之上。输入流读取数据,输出流写入数据。

Java的基本输出流类是java.io.OutputStream。

OutputStream的基本方法是write(int b)。该方法接收一个0~255之间的整数作为参数,将对应字节写入到输出流中。当使用write(int b)将int写入一个网络连接时,如果将一个超出0~255的int传入write(int b),将写入这个数的最低字节,其他3字节将被忽略。

字符生成器协议定义了一个发出ASCII文本的服务器。这个协议最流行的变体是发送72个字符的文本行,其中包含可显示的ASCII字符,是33~126之间的字符,不包含空白符合控制字符。

ASCII是一个7位字符集,所以每个字符都可作为单字节发送。因此,这个协议可以直接使用基本write()方法实现。

 1 public static void generateCharacters(OutputStream out) throws IOException
 2 {
 3     int firstPrintableCharacter = 33;
 4     int numberOfPrintbableCharacters = 94;
 5     int numberOfCharactersPerLine = 72;
 6     int start = firstPrintableCharacter;
 7     while(true)
 8     {
 9         for(int i =start;i<start+numberOfCharactersPerLine;i++)
10         {
11             out.write(((i-firstPrintableCharacter)%numberOfCharacers)+firstPrintbaleCharacter);
12         }
13         out.write('\r');
14         out.write('\n');
15         start = ((start+1)-firstPrintableCharacter)%numberOfPrintableCharacters+firstPrintableCharacter;
16     }
17 }                            

一次写入1个字节效率不高。大多数TCP/IP实现都会在某种程度上缓存数据,它们在内存中积累数据字节,只有积累到一定量的数据后,或者经过一定的时间后,才将所积累的数据发动到最终目的地。下面将整行打包在一个字节数组中,一次发送一行。

 1 public static void generateCharacters(OutputStream out) throws IOException
 2 {
 3     int firstPrintableCharacter = 33;
 4     int numberOfPrintableCharacters = 94;
 5     int numberOfCharactersPerLine = 72;
 6     
 7     int start = firstPrintableCharacter;
 8     byte[] line = new byte[numberOfCharactersPerLine+2];
 9     
10     while(true)
11     {
12         for(int i =start;i<start+numberOfCharactersPerLine;i++)
13         {
14             line[i-start] = (byte)((i-firstPrintableCharacter)%numberOfPrintableCharacters+firstPrintableCharacter);
15         }
16         line[72] = (byte)'\r';
17         line[73] = (byte)'\n';
18         out.write(line);
19         start = ((start + 1)-firstPrintableCharacter)%numberOfPrintableCharacters+firstPrintableCharacter;
20     }
21 }    

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网