pozmieniałem wszystko co się dało. Daje tu kody aplikacji PC i Androida:
ANDROID:
public class Start extends Activity {
public static int port = 1900;
Socket s;
//DataOutputStream dos;
DataInputStream dis;
Thread bind,drw;
byte[] b=new byte[2];
byte[] recv=new byte[1152054];
int all=1152054;
Screen screen;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.dev);
FrameLayout fl =(FrameLayout)findViewById(R.id.czopx);
screen=new Screen(this);
fl.addView(screen);
try{
ServerSocket ss = new ServerSocket(Start.port);
System.out.println("Bind!");
s = ss.accept();
System.out.println("Connected!");
dis=new DataInputStream(s.getInputStream());
//dos=new DataOutputStream(s.getOutputStream());
drw=new Thread(new Runnable(){
public void run() {
try{
while(true){
//System.out.println("START:REF!");
Screen.cache=BitmapFactory.decodeByteArray(recv, 0,1152054);
screen.refresh();
Thread.sleep(33);
//System.out.println("STOP:REF!");
}
}catch(Exception ex){System.out.println("DrawThreadError: "+ex);}
}
});
bind=new Thread(new Runnable(){
public void run() {
try{
while(true){
//System.out.println("START!");
int readen = 0;
while(readen<all)
{
readen += dis.read(recv, readen, all-readen);
//System.out.println(readen);
}
//dos.write(b,0,2);
// System.out.println("STOP!");
}
}catch(Exception ex){System.out.println("ThreadError: "+ex);}
}
});
bind.start();
drw.start();
System.out.println("Launch Thread!");
}catch(Exception ex){System.out.println("Error: "+ex);}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_start, menu);
return true;
}
}
//*************************************************************
class Screen extends View {
public static Bitmap cache;
Paint pt = new Paint();
public Screen(Context context) {
super(context);
setBackgroundColor(Color.CYAN);
}
public void onDraw(Canvas canvas){
super.onDraw(canvas);
if(cache!=null){
canvas.drawBitmap(cache, 0, 0, pt);
}
}
public void refresh(){
this.postInvalidate();
}
}
PC:
public class Start {
public static String ip="127.0.0.1";
public static int port=1900;
public static void main(String[] args){
Fx fx = new Fx();
}
}
class Fx implements Runnable{
Socket s;
DataOutputStream dos;
//DataInputStream dis;
Thread snapper;
Robot robot;
BufferedImage cache;
public Fx(){
try{
s=new Socket(Start.ip,Start.port);
dos = new DataOutputStream(s.getOutputStream());
//dis = new DataInputStream(s.getInputStream());
snapper=new Thread(this);
robot=new Robot();
snapper.start();
}catch(Exception ex){System.out.println("Error: "+ex);}
}
@Override
public void run() {
try{
while(true){
ImageIO.write(robot.createScreenCapture(new Rectangle(0, 0, 800, 480)),"bmp",dos);
Thread.sleep(33);
//dis.read();
}
}catch(Exception ex){System.out.println("ThreadError: "+ex);}
}
}
Z tego co sprawdziłem to tylko wątek który odbiera bajty się mozoli. Program na PC wyrabia bez problemu , wątek który tworzy Bitmap z tablicy bajtów i odświeżanie też się wyrabiają.
Wiem że wątek odpowiedzialny za odbieranie danych odbiera z prędkością ok. 1kl/s więc ok. 1MB/s. Nie sądzę żeby to były wszystkie możliwości portu USB :D
Pętla while obiera małe porcje danych więc musi dużo razy się wykonać i to spowalnia cały proces.
Wniosek z tego taki że odbieranie jest skopane i pasowało by je naprawić tylko jakich instrukcji mam użyć ?
@Antoniossss
Słowo readen to nie moja twórczość. Znalazłem tą instrukcje gdzieś na forum bo moja się bardziej mozoliła.
Twierdzisz coś o Bufforowaniu mógłbyś trochę przybliżyć mi to pojęcie bo wiem ze istnieje coś jak BufferemInputStream ?