WindowsAPIで作成したサーバーと通信するTCPクライアントを作成しています
WindowsAPIで作成したサーバーとWindowsAPIで作成したクライアント同士の通信では問題無いのですが

基本的には問題無く動作していて
たまにInputStreamのreadの戻り値がdata.lengthになり
欲しいデータの後ろに不必要なデータが入っていたり(ここはヘッダ情報から特定可能なので対処可能です)
欲しいデータの前に不必要なデータが入っている事があるのはどうしてですか?

試しにまったく同じデータを間隔を開けて送信すると問題が再現できる時とできない時があります

InputStream input; = socket.getInputStream();
byte data [] = new byte[1024];
int position = 0;

ループ {
  receivesize = input.read(data, position, data.length - position);
  // 必要なデータが300でもreceivesizeが1024になる事がある
  position += receivesize;
}

最少構成のコードはこんな感じです
分かる人がいたらお願いします
足りない情報があったらすみません補足します

開発環境は Windows Vista
動作環境は Androidです