java 读入nmn格式文件
我看了网上别人用C写的读nmn股票5分钟历史数据的程序。Google了一把,没有java
的版本。就想试一下,原以为很简单,结果折腾了半天才完成。希望对想用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();
}
}