DataInputStream.m 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //
  2. // DataInputStream.m
  3. // mtalk
  4. //
  5. // Created by maye on 13-10-24.
  6. // Copyright (c) 2013年 zuoye. All rights reserved.
  7. //
  8. #import "DataInputStream.h"
  9. @interface DataInputStream (PrivateMethods)
  10. - (int32_t)read;
  11. @end
  12. @implementation DataInputStream
  13. - (id)initWithData:(NSData *)aData {
  14. self = [self init];
  15. if(self != nil){
  16. data = [[NSData alloc] initWithData:aData];
  17. }
  18. return self;
  19. }
  20. - (id)init{
  21. self = [super init];
  22. if(self != nil){
  23. length = 0;
  24. }
  25. return self;
  26. }
  27. + (id)dataInputStreamWithData:(NSData *)aData {
  28. DataInputStream *dataInputStream = [[self alloc] initWithData:aData];
  29. return dataInputStream ;
  30. }
  31. -(NSUInteger)getAvailabledLen{
  32. return [data length];
  33. }
  34. - (int32_t)read{
  35. int8_t v;
  36. [data getBytes:&v range:NSMakeRange(length,1)];
  37. length++;
  38. return ((int32_t)v & 0x0ff);
  39. }
  40. - (int8_t)readChar {
  41. int8_t v;
  42. [data getBytes:&v range:NSMakeRange(length,1)];
  43. length++;
  44. return (v & 0x0ff);
  45. }
  46. - (int16_t)readShort {
  47. int32_t ch1 = [self read];
  48. int32_t ch2 = [self read];
  49. if ((ch1 | ch2) < 0){
  50. @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil];
  51. }
  52. return (int16_t)((ch1 << 8) + (ch2 << 0));
  53. }
  54. - (int32_t)readInt {
  55. // int32_t ch1 = [self read];
  56. // int32_t ch2 = [self read];
  57. // int32_t ch3 = [self read];
  58. // int32_t ch4 = [self read];
  59. // if ((ch1 | ch2 | ch3 | ch4) < 0){
  60. // @throw [NSException exceptionWithName:@"Exception" reason:@"EOFException" userInfo:nil];
  61. // }
  62. // return ((ch1 << 0) + (ch2 << 8) + (ch3 << 16) + (ch4 << 24));
  63. int32_t i;
  64. [data getBytes:&i length:4];
  65. length = length + 4;
  66. return i;
  67. }
  68. - (int64_t)readLong {
  69. int64_t l;
  70. [data getBytes:&l length:8];
  71. length = length + 8;
  72. return l;
  73. }
  74. - (NSString *)readUTF {
  75. //short utfLength = [self readShort];
  76. int32_t utfLength = [self readInt];
  77. if (data.length < length + utfLength) {
  78. return nil;
  79. }
  80. NSData *d = [data subdataWithRange:NSMakeRange(length,utfLength)];
  81. NSString *str = [[NSString alloc] initWithData:d encoding:NSUTF8StringEncoding];
  82. length = length + utfLength;
  83. return str;
  84. }
  85. -(NSData *)readDataWithLength:(int)len{
  86. NSLog(@"================>>>> lenght: %ld len:%d",(long)length,len);
  87. NSData *d =[data subdataWithRange:NSMakeRange(length, len)];
  88. length = length +len;
  89. return d;
  90. }
  91. -(NSData *)readLeftData{
  92. NSLog(@"=====>>> length %ld data's length %ld",(long)length,(unsigned long)[data length]);
  93. if ([data length]>length) {
  94. NSData *d =[data subdataWithRange:NSMakeRange(length, [data length])];
  95. length = [data length];
  96. return d;
  97. }
  98. return nil;
  99. }
  100. @end