java 读入nmn格式文件

九月 1, 2009 | 标签 java  IO   | 浏览
评论 0
我看了网上别人用C写的读nmn股票5分钟历史数据的程序。Google了一把,没有java

的版本。就想试一下,原以为很简单,结果折腾了半天才完成。希望对想用java程序读相关

数据的有点帮助。

import java.io.*; 
import java.util.*; 
public class nmnread{ 

public static void main(String args[]) throws IOException 
{ 
    
    String filename = args[0]; 
    int len  =  40; 
    byte[] bytes = new byte[len]; 
        
    BufferedInputStream bis=new BufferedInputStream(new FileInputStream(filename)); 
    
    while (bis.available() != 0) { 
     
       bis.read(bytes,0,len); 
        
       ByteArrayInputStream bytestream = new ByteArrayInputStream(bytes); 
   DataInputStream is = new DataInputStream(bytestream); 

       int  i1 = is.readUnsignedByte();        
       int  i2 = is.readUnsignedByte();         
       int  i3 = is.readUnsignedByte();         
       int  i4 = is.readUnsignedByte();       
     int   uTime =(((int)(i4&0xff)<<24)|((int)(i3&0xff)<<16)|((int)(i2&0xff)<<8)|((int)(i1&0xff)<<0)); 
       
       int uYear = (( uTime&0xFFF00000)>>20)&0x00000FFF;//右移20位 
       int uMonth = ( ( uTime<<12)>>28)&0x0000000F;//先左移12位再右移28位 
       int uDate = ( ( uTime<<16)>>27)&0x0000001F; 
       int uHour = ( ( uTime<<21)>>27)&0x0000001F; 
       int uMinute = ( ( uTime<<26)>>26)&0x0000003F; 

       
       i1 = is.readUnsignedByte();        
       i2 = is.readUnsignedByte();         
       i3 = is.readUnsignedByte();         
       i4 = is.readUnsignedByte();                 
       float dOpen   =  (float)( ((i4&0xff)<<24) | ((i3&0xff) <<16 ) |( (i2&0xff)<<8 )|(i1&0xff) )/1000;  
       
       i1 = is.readUnsignedByte();      
       i2 = is.readUnsignedByte();      
       i3 = is.readUnsignedByte();      
       i4 = is.readUnsignedByte();      
       float dHigh   =  (float)( ((i4&0xff)<<24) | ((i3&0xff) <<16 ) |( (i2&0xff)<<8 )|(i1&0xff) )/1000; 
       
       i1 = is.readUnsignedByte();      
       i2 = is.readUnsignedByte();      
       i3 = is.readUnsignedByte();      
       i4 = is.readUnsignedByte();      
       float dLow    =  (float)( ((i4&0xff)<<24) | ((i3&0xff) <<16 ) |( (i2&0xff)<<8 )|(i1&0xff) )/1000; 
       
       i1 = is.readUnsignedByte();      
       i2 = is.readUnsignedByte();      
       i3 = is.readUnsignedByte();      
       i4 = is.readUnsignedByte();            
       float dClose  =  (float)( ((i4&0xff)<<24) | ((i3&0xff) <<16 ) |( (i2&0xff)<<8 )|(i1&0xff) )/1000; 
       
       i1 = is.readUnsignedByte();      
       i2 = is.readUnsignedByte();      
       i3 = is.readUnsignedByte();      
       i4 = is.readUnsignedByte();      
       float dAmount =  (float)( ((i4&0xff)<<24) | ((i3&0xff) <<16 ) |( (i2&0xff)<<8 )|(i1&0xff) )/1000; 
       
       
       i1 = is.readUnsignedByte();      
       i2 = is.readUnsignedByte();      
       i3 = is.readUnsignedByte();      
       i4 = is.readUnsignedByte();      
       float dVolume =  (float)( ((i4&0xff)<<24) | ((i3&0xff) <<16 ) |( (i2&0xff)<<8 )|(i1&0xff) )/1000; 
     
       System.out.println( uYear+"-"+uMonth+"-"+uDate+" "+uHour+":"+uMinute+"\t"+dOpen+"\t"+dHigh+"\t"+dLow+"\t"+dClose+"\t"+dAmount+"\t"+dVolume ); 
    } 
    bis.close(); 
} 
} 




发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。